С нами с 12.07.04
Сообщения: 1035
Рейтинг: 678
|
Добавлено: 05/06/08 в 23:52 |
Пишу небольшой скрипт статов/кликов. Будет работать на довольно большом трафе.
Собственно вопрос - текстовые файлы можно использовать для логов или только БД?
з.ы. при тестировании файл логов порой "обнулялся", но, я думаю дело в моих руках, а не пхп.
|
|
|
|
127.0.0.1
С нами с 26.04.06
Сообщения: 1092
Рейтинг: 557
|
Добавлено: 06/06/08 в 02:28 |
бд требуется настраивать под большой траф, с текстовыми файлами попроще, там все опирается на кеширующую подсистему и в целом опирается на степень загруженности диска (как часто идут обращения к диску).
у меня 3 скрипта кликов (пишут разную статистику с разных сайтов) работают с текстовыми файлами, вполне справляются с небольшой (по меркам адалта) нагрузкой в 42-70к хитов в сутки
|
|
|
|
С нами с 27.06.07
Сообщения: 289
Рейтинг: 247
|
Добавлено: 06/06/08 в 07:21 |
Joseph писал: | Пишу небольшой скрипт статов/кликов. Будет работать на довольно большом трафе.
Собственно вопрос - текстовые файлы можно использовать для логов или только БД?
з.ы. при тестировании файл логов порой "обнулялся", но, я думаю дело в моих руках, а не пхп. |
я бы всё таки пихал в БД, но использовал heap-таблицы, а по крону, раз в 10-30 минут, сохранял на винт.
|
|
|
|
С нами с 18.08.04
Сообщения: 6376
Рейтинг: 4430
|
Добавлено: 06/06/08 в 08:04 |
maybe SQLite?
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 06/06/08 в 08:42 |
Joseph писал: | Пишу небольшой скрипт статов/кликов. Будет работать на довольно большом трафе.
Собственно вопрос - текстовые файлы можно использовать для логов или только БД?
з.ы. при тестировании файл логов порой "обнулялся", но, я думаю дело в моих руках, а не пхп. |
Любой вариант в принципе приемлем, самое главное руки выровняй
|
|
|
|
саблезубый кролик
С нами с 02.07.05
Сообщения: 2966
Рейтинг: 993
|
Добавлено: 06/06/08 в 10:33 |
Joseph писал: | Собственно вопрос - текстовые файлы можно использовать для логов или только БД? |
Лучше всего использовать Мемкэш или Trivial Database, причем tdb не тот который на sourceforge лежит а тот который в комплекте самбы идет.
|
|
|
|
С нами с 12.05.06
Сообщения: 132
Рейтинг: 29
|
Добавлено: 06/06/08 в 19:15 |
Цитата: | при тестировании файл логов порой "обнулялся" |
- возможна проблема как раз таки с настройками у хостера (обычно называют - неправильно настроенный модуль определения свободного места
|
|
|
|
Web Developer С++
С нами с 25.11.01
Сообщения: 859
Рейтинг: 759
|
Добавлено: 07/06/08 в 01:57 |
Joseph, ты файл хоть флочишь при записи?
|
|
|
|
С нами с 26.02.03
Сообщения: 2366
Рейтинг: 987
|
Добавлено: 07/06/08 в 02:08 |
Joseph писал: | з.ы. при тестировании файл логов порой "обнулялся", но, я думаю дело в моих руках, а не пхп. |
Вот поэтому и лучше пользоваться любой базой данных, что бы не думать про хранение данных, а сосредоточиться только на алгоритме работы счетчика.
|
|
|
|
С нами с 12.07.04
Сообщения: 1035
Рейтинг: 678
|
Добавлено: 07/06/08 в 11:27 |
Спасибо всем за советы. Всем +5. ;) Буду думать насчет БД.
Кстати, если в скрипте для подсчета кликов была ошибка из-за которой он иногда подвисал, молго ли это очищать файл логов?
Конструкция была такой:
Код: |
file();
//берем данные, делаем инкремент
//пишем все в файл, в защищенном режиме
$fp = fopen($s_file, "w+");
flock($fp, LOCK_EX))
fwrite($fp, $n_line);
flock($fp, LOCK_UN);
fclose($fp);
header('Location: http://abc.com'); //здесь была ошибка со слешем на конце локэйшн, из-за которой он _иногда_, но не всегда, подвисал.
|
Может стоит все операции с данными производить уже после flock(), обойтись без file() в начале?
DF™ писал: | Joseph, ты файл хоть флочишь при записи? |
Да, когда пишу в файл - flock($fp, LOCK_EX)
Когда открываю файл для чтения (в двух скриптах, один для подсчета хитов, а другой для кликов) - просто открываю file();.
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 07/06/08 в 11:51 |
При таком алгоритме клики могут проскальзывать.
Не забываем о параллелизме.
Я-бы рекоммендовал файл открывать эксклюзивно, пересчитывать, и закрывать.
При этом надо делать так, чтобы выдача страницы не задерживалась.
|
|
|
|
Web Developer С++
С нами с 25.11.01
Сообщения: 859
Рейтинг: 759
|
Добавлено: 07/06/08 в 13:17 |
Joseph писал: | Конструкция была такой:
Код: |
file();
//берем данные, делаем инкремент
//пишем все в файл, в защищенном режиме
$fp = fopen($s_file, "w+");
flock($fp, LOCK_EX))
fwrite($fp, $n_line);
flock($fp, LOCK_UN);
fclose($fp);
|
|
Это глупость!
Переделай свой код просто и забей на базы данных.
$fp = fopen($s_file, "r+");
flock($fp, LOCK_EX))
считываем данные
делаем инкремент
позицию на начала файла
fwrite($fp, $n_line);
считываем текущию позицию
обрезаем файл
fclose($fp);
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 07/06/08 в 16:39 |
какие то примеры извращенные. куча лишних или непродуманных действий.
по сабжу, на серьезном трафе варианта 2:
логи (текстовый формат).
специализированный демон.
а базы данных стоит использовать только для последующего анализа и хранения данных.
причем судя по приведенным выше кускам кода - ТС действительно лучше БД использовать - так как с такой логикой написания скриптов далеко не уехать. А базы данных множество косяков алгоритма могут сгладить.
|
|
|
|