imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 10.06.2004, 10:10     # 1
Drualex
Guest
 
Сообщения: n/a

Тот кто работал с текстовыми файлами.

Товарищи, кто-нить юзал блокировку на файлах? Т.е. flock()?
Просто вот думаю делать ли ее на голование, оно у меня использует файлы, и так вот...представьте себе такую ситуацию...к вам заходит большое кол-во челов, и многие голосуют...и так вот один проголовал, файл стерся, но в этот же момент другой просматривает результаты, файл пытается начать чтение....но он не находит вообще ничего, потому что все было стерто тем пользователем который проголосовал...И сразу же посыпались ошибки...Конечно я понимаю, что это надо что бы в 1 милисек такие действия провелись...Но можете мне сказать, мне вообще этим стоит забивать голову?
 
Старый 10.06.2004, 12:26     # 2
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
а что ОС не обеспечивает блокировку? в этом случае ОС - это твоя СУБД
Sheryld вне форума  
Старый 10.06.2004, 12:34     # 3
V0iD
Junior Member
 
Аватар для V0iD
 
Регистрация: 01.06.2003
Адрес: Msk
Пол: Male
Сообщения: 138

V0iD Путь к славе только начался
Drualex
Несомненно стоит. Конечно, такая ситуация с почти одновременным голосованием двух или более пользователей очень редка, но это не значит, что такое никогда не случится...
V0iD вне форума  
Старый 10.06.2004, 13:33     # 4
Drualex
Guest
 
Сообщения: n/a

Просто знаете, я еще что не видел что бы кто то юзал блокировки...т.е. на форумах, правда бесплатных, поэтому у меня и сложилось впечатление что это не обязательно.
 
Старый 10.06.2004, 15:23     # 5
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
По ходу проще писАть в MySQL, чем в файл. Он для этого и придуман...
EvroStandart вне форума  
Старый 10.06.2004, 16:07     # 6
_ARMAGEDDON_
Guest
 
Сообщения: n/a

не проще а нужно!
кто щас в файлы то пишет?
 
Старый 10.06.2004, 16:14     # 7
ReapeR
Advanced Member
 
Аватар для ReapeR
 
Регистрация: 08.08.2002
Адрес: Nab. Chelny, Tatarstan
Сообщения: 447

ReapeR МолодецReapeR МолодецReapeR Молодец
_ARMAGEDDON_
и что из-за одного файла подымать мускл чтоль? думаю не слишком правильная идея
__________________
-=Nomen est Omen=-
ReapeR вне форума  
Старый 10.06.2004, 16:28     # 8
lanix
::VIP::
 
Аватар для lanix
 
Регистрация: 09.05.2002
Адрес: Lithuania
Сообщения: 591

lanix Известность не заставит себя ждать
может использовать темповые файлы ...
lanix вне форума  
Старый 10.06.2004, 18:23     # 9
Goryn
::VIP::
 
Аватар для Goryn
 
Регистрация: 06.03.2003
Адрес: DZ, LBP, Moscow
Пол: Male
Сообщения: 633

Goryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собой
Мучить для голосования MySQL я смысла не вижу.

Лично я все пишу на Perl. Там есть замечательный стандартный модуль DB_File, позволяющий работать с текстовыми файлами как с массивами со всеми вытекающими отсюда возможностями по изменению / вставке / удалению строк. Ни о каких блокировках запариваться не надо, поскольку по сути текстовый файл рассматривается с точки зрения скрипта как БД.

Аналогов этому на PHP нет.

---------------------------
Можно (опять же для Perl) для стандартной работы с файлами использовать следующие функции блокировки и разблокировки:

Обратите внимание: в связи с отсутсвием на форуме тега для обозначения Perl кода, я использовал тег PHP. Но код написан именно для Perl!!!


PHP код:
sub lockfile {
 
my $lcount=0;
 
my $handle=shift;
 
my $lflag=1;
 
until (flock($handle2)) {
  
sleep .10;
  if (++
$lcount>50) {$lflag=0}
 }
 return 
$lflag;
}
sub unlockfile {
 
my $handle=shift;
 
flock($handle8); 

пример вызова:

PHP код:
open (RON,"+<filename") || die;
   &
lockfile(RON) || die;

...

   &
unlockfile(RON);
  
close(RON); 
Функция lockfile пытается 50 раз с интервалом обратиться к файлу. Если за этот период он остается заблокирован другим процессом, то возвращается флаг ошибки (нулевой результат на выходе).
__________________
Меня многие спрашивают, как я живу с тремя головами... На самом деле, я триедин, как Великие Бобы!

Последний раз редактировалось Goryn; 10.06.2004 в 18:25.
Goryn вне форума  
Старый 10.06.2004, 18:36     # 10
Drualex
Guest
 
Сообщения: n/a

А вот пример того что я сделал с блокировкой:
$file_name='file.txt';
$data=file($file_name);
$file=fopen($file_name,'a+');
flock($file,LOCK_EX);
ftruncate($file,0);
fputs($file,trim($data[0])."\n");
for($i=1;$i<count($data);$i++):
list($count,$text)=explode(':|||:',$data[$i]);
if($_GET['vote']==$i) $count++;
$vote_text=trim("$count:|||:$text");
fputs($file,"$vote_text\n");
endfor;
fflush($file);
flock($file,LOCK_UN);
fclose($file); ;
$data=file($file_name);
echo'
<table border="0"><tr><td height="6px"></td></tr></table>
<TABLE class="vote" border="0" width="140px" cellpadding="0" cellspacing="0">
<TR><TD colspan="2" style="BORDER-BOTTOM:#FF9900 2px solid;" bgcolor=3B95D1 align="center"><p class="nav">Ãîëîñîâàíèå</p></TD></TR>
<TR><TD colspan="2" class="vote_top">',$data[0],'</TD></TR>';
for($y=1;$y<count($data);$y++):
list($count,$text)=explode(':|||:',$data[$y]);
@$count_all+=$count;
endfor;
for($i=1;$i<count($data);$i++):
list($count,$text)=explode(':|||:',$data[$i]);
@$count_percent=($count/$count_all)*100;
echo'
<TR><TD class="vote">',$text,'</TD><TD class="vote_counter">',$count,'/',(int)$count_percent,'%</TD></TR>';
endfor;
echo'
<TR><TD class="vote_down">Голосование.:</TD><TD class="vote_counter_all">',$count_all,'</TD></TR>
<TR><TD colspan="2" style="BORDER-TOP:#FF9900 2px solid;" height="3px" bgcolor=3B95D1><p style="font-size:3px;">&nbsp;</p></TD></TR>
</TABLE>';

Извините, плиз за столь огромное колличество кода, но по моему мнению тут можно увидеть картину наиболее полно.
ЗЫ. А что касается мускула, то я его просто еще не знаю (но работы ведуться), но так же я согласен и с тем что его использовать для такого маленького скриптика будет лишним(он у меня всего 3 кб).
 
Старый 10.06.2004, 20:35     # 11
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Цитата:
Drualex:
А что касается мускула, то я его просто еще не знаю (но работы ведуться), но так же я согласен и с тем что его использовать для такого маленького скриптика будет лишним(он у меня всего 3 кб).
Ты, по ходу, в принцыпе не понимаеш, зачем нужен MySQL. Все скрипты останутся, только работать будут не с файлами, а с базой. Только, если как ты писАл : "к вам заходит большое кол-во челов" и каждый из них оставит комментарий, то база в любом случае быстрее и удобнее, чем файл.
EvroStandart вне форума  
Старый 10.06.2004, 21:24     # 12
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Drualex:
ЗЫ. А что касается мускула, то я его просто еще не знаю (но работы ведуться), но так же я согласен и с тем что его использовать для такого маленького скриптика будет лишним(он у меня всего 3 кб).
IMHO, неможет быть лишним использование более мощного инструмента, превосходящего по всем параметрам текущий (в.т.ч. и по скорости), да еще и более удобный в работе!!!
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 10.06.2004, 23:59     # 13
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
кстати не сказал бы что использование любой бд проще, чем обычного файла.
Sheryld вне форума  
Старый 11.06.2004, 00:47     # 14
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Sheryld:
кстати не сказал бы что использование любой бд проще, чем обычного файла.
Возможно, но обсуждаемой здесь MySQL нисколько не сложнее, а на мой взгляд намного проще и удобнее!
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 11.06.2004, 01:05     # 15
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
текстовый файл. что может быть проще. придумал простенький формат и все.

а для базы данных надо, по меньшей мере:

знать ее особенности.
знать язык SQL(плюс диалект - расширения sql, пример: Ms Sql Server/T-SQL).

пример. чтобы задействовать в mysql "транзакции", надо работать с таблицами InnoDB, а это само по себе уже проблемно, т.к. при больших объемах данных эти таблицы ведут себя не лучшим образом. плюс надо знать транзакционную модель mysql, методы оптимизации и т.д.

а если ваша база состоит из 1 мегабайта текстовых данных и простенького формата, то опять же - никакого смысла в sql нету, т.к. это все равно, что стерлять из пушки по воробьям.

в 5-ой версии php должно появится новое расширение: SqlLite. вот это будет самое оно для таких задач.

кстати ещё один вариант - использовать xml в качестве хранилища данных небольшого размера. но это уже ближе к текстовому файлу опять же, нежели к базе данных.
Sheryld вне форума  
Старый 11.06.2004, 01:07     # 16
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
SQLite уже есть и его можно использовать прямо сейчас, а не ждать PHP5. Тем более, что это на самом деле быстрая и удобная альтернатива и файлам, и MySQL для мелких задач.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 11.06.2004, 01:20     # 17
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Sheryld:
текстовый файл. что может быть проще. придумал простенький формат и все.
А в БД уже не нужно никаких форматов придумывать вообще, просто задал структуру нужную, и не думай в каком формате СУБД это все будет хранить!
Цитата:
Sheryld:
а для базы данных надо, по меньшей мере:

знать ее особенности.
знать язык SQL(плюс диалект - расширения sql, пример: Ms Sql Server/T-SQL).

пример. чтобы задействовать в mysql "транзакции", надо работать с таблицами InnoDB, а это само по себе уже проблемно, т.к. при больших объемах данных эти таблицы ведут себя не лучшим образом. плюс надо знать транзакционную модель mysql, методы оптимизации и т.д.

а если ваша база состоит из 1 мегабайта текстовых данных и простенького формата, то опять же - никакого смысла в sql нету, т.к. это все равно, что стерлять из пушки по воробьям.
Именно, если всего 1 мегабайт текстовых данных, то все приведенное выше знать абсолютно не обязательно!
Часто дотаточно ехать на велосипеде, но подовляющее большинство ездят на машинах потому что это удобнее, это же не называется "стерлять из пушки по воробьям"!!!???
Цитата:
Sheryld:
кстати ещё один вариант - использовать xml в качестве хранилища данных небольшого размера. но это уже ближе к текстовому файлу опять же, нежели к базе данных.
Да, XML - это вариант. По методам работы с ним (API парсеров) больше на базу данных он похож, хотя есть к этому два подхода... не буду в это углубляться, все в курсе...
И вообще, в 99% случаев БД будет работать быстрее чем написанные самим функции работы с файлом (за счет индексов, кеширования, алгоритмов и т.д...).
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 11.06.2004, 13:34     # 18
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Цитата:
Hubbitus:
Именно, если всего 1 мегабайт текстовых данных, то все приведенное выше знать абсолютно не обязательно!
Даже если 10 мегабайт. В данном случае нужна одна таблица с одним (если я правильно понял) полем. Знать нужны две команды: выборки (чтения) и добавления. Больше ничего не нужно.
EvroStandart вне форума  
Старый 11.06.2004, 13:39     # 19
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
SamJa
Хм, а сортировка, поиск по подстроке и/или регэкспу, группировка, удаление, изменение? Не все задачи можно свести ко вставке и чтению.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 11.06.2004, 14:50     # 20
Goryn
::VIP::
 
Аватар для Goryn
 
Регистрация: 06.03.2003
Адрес: DZ, LBP, Moscow
Пол: Male
Сообщения: 633

Goryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собой
Цитата:
Сообщение от Saruman
Хм, а сортировка, поиск по подстроке и/или регэкспу, группировка, удаление, изменение? Не все задачи можно свести ко вставке и чтению.
А при чем здесь вообще голосование, с которого все началось. Что-то нас увело совершенно в другую сторону...

Кстати, если речь об 1 мегабайте данных, то в таких случаях и следует использовать MySQL. А когда речь идет о каком-то простеньком голосовании, то какой смысл.

И вообще, может у человека хост, на котором MySQL не предусмотрено.
__________________
Меня многие спрашивают, как я живу с тремя головами... На самом деле, я триедин, как Великие Бобы!
Goryn вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 11:57.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.