| imho.ws |
![]() |
|
|
|
# 1 |
|
Guest
Сообщения: n/a
|
Тот кто работал с текстовыми файлами.
Товарищи, кто-нить юзал блокировку на файлах? Т.е. flock()?
Просто вот думаю делать ли ее на голование, оно у меня использует файлы, и так вот...представьте себе такую ситуацию...к вам заходит большое кол-во челов, и многие голосуют...и так вот один проголовал, файл стерся, но в этот же момент другой просматривает результаты, файл пытается начать чтение....но он не находит вообще ничего, потому что все было стерто тем пользователем который проголосовал...И сразу же посыпались ошибки...Конечно я понимаю, что это надо что бы в 1 милисек такие действия провелись...Но можете мне сказать, мне вообще этим стоит забивать голову? |
|
|
# 9 |
|
::VIP::
Регистрация: 06.03.2003
Адрес: DZ, LBP, Moscow
Пол: Male
Сообщения: 633
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Мучить для голосования MySQL я смысла не вижу.
Лично я все пишу на Perl. Там есть замечательный стандартный модуль DB_File, позволяющий работать с текстовыми файлами как с массивами со всеми вытекающими отсюда возможностями по изменению / вставке / удалению строк. Ни о каких блокировках запариваться не надо, поскольку по сути текстовый файл рассматривается с точки зрения скрипта как БД. Аналогов этому на PHP нет. --------------------------- Можно (опять же для Perl) для стандартной работы с файлами использовать следующие функции блокировки и разблокировки: Обратите внимание: в связи с отсутсвием на форуме тега для обозначения Perl кода, я использовал тег PHP. Но код написан именно для Perl!!! PHP код:
PHP код:
__________________
Меня многие спрашивают, как я живу с тремя головами... На самом деле, я триедин, как Великие Бобы! Последний раз редактировалось Goryn; 10.06.2004 в 18:25. |
|
|
|
|
# 10 |
|
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;"> </p></TD></TR> </TABLE>'; Извините, плиз за столь огромное колличество кода, но по моему мнению тут можно увидеть картину наиболее полно. ЗЫ. А что касается мускула, то я его просто еще не знаю (но работы ведуться), но так же я согласен и с тем что его использовать для такого маленького скриптика будет лишним(он у меня всего 3 кб).
|
|
|
# 11 | |
|
Full Member
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
|
|
|
|
|
|
# 12 | |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
|
# 14 | |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
|
# 15 |
|
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
текстовый файл. что может быть проще. придумал простенький формат и все.
а для базы данных надо, по меньшей мере: знать ее особенности. знать язык SQL(плюс диалект - расширения sql, пример: Ms Sql Server/T-SQL). пример. чтобы задействовать в mysql "транзакции", надо работать с таблицами InnoDB, а это само по себе уже проблемно, т.к. при больших объемах данных эти таблицы ведут себя не лучшим образом. плюс надо знать транзакционную модель mysql, методы оптимизации и т.д. а если ваша база состоит из 1 мегабайта текстовых данных и простенького формата, то опять же - никакого смысла в sql нету, т.к. это все равно, что стерлять из пушки по воробьям. в 5-ой версии php должно появится новое расширение: SqlLite. вот это будет самое оно для таких задач. кстати ещё один вариант - использовать xml в качестве хранилища данных небольшого размера. но это уже ближе к текстовому файлу опять же, нежели к базе данных. |
|
|
|
|
# 16 |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
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 |
|
|
|
|
# 17 | |||
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
Часто дотаточно ехать на велосипеде, но подовляющее большинство ездят на машинах потому что это удобнее, это же не называется "стерлять из пушки по воробьям"!!!??? Цитата:
И вообще, в 99% случаев БД будет работать быстрее чем написанные самим функции работы с файлом (за счет индексов, кеширования, алгоритмов и т.д...).
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|||
|
|
|
|
# 18 | |
|
Full Member
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
|
|
|
|
|
|
# 19 |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
SamJa
Хм, а сортировка, поиск по подстроке и/или регэкспу, группировка, удаление, изменение? Не все задачи можно свести ко вставке и чтению.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
|
|
|
|
# 20 | |
|
::VIP::
Регистрация: 06.03.2003
Адрес: DZ, LBP, Moscow
Пол: Male
Сообщения: 633
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Кстати, если речь об 1 мегабайте данных, то в таких случаях и следует использовать MySQL. А когда речь идет о каком-то простеньком голосовании, то какой смысл. И вообще, может у человека хост, на котором MySQL не предусмотрено.
__________________
Меня многие спрашивают, как я живу с тремя головами... На самом деле, я триедин, как Великие Бобы! |
|
|
|