Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Вопрос к PHP-профам. Простой скрипт статов/кликов...
цитата
05/06/08 в 23:52
 Joseph
Пишу небольшой скрипт статов/кликов. Будет работать на довольно большом трафе.

Собственно вопрос - текстовые файлы можно использовать для логов или только БД?

з.ы. при тестировании файл логов порой "обнулялся", но, я думаю дело в моих руках, а не пхп. icon_smile.gif
цитата
06/06/08 в 02:28
 localhost
бд требуется настраивать под большой траф, с текстовыми файлами попроще, там все опирается на кеширующую подсистему и в целом опирается на степень загруженности диска (как часто идут обращения к диску).
у меня 3 скрипта кликов (пишут разную статистику с разных сайтов) работают с текстовыми файлами, вполне справляются с небольшой (по меркам адалта) нагрузкой в 42-70к хитов в сутки
цитата
06/06/08 в 07:21
 Teacher-X
Joseph писал:
Пишу небольшой скрипт статов/кликов. Будет работать на довольно большом трафе.

Собственно вопрос - текстовые файлы можно использовать для логов или только БД?

з.ы. при тестировании файл логов порой "обнулялся", но, я думаю дело в моих руках, а не пхп. icon_smile.gif


я бы всё таки пихал в БД, но использовал heap-таблицы, а по крону, раз в 10-30 минут, сохранял на винт.
цитата
06/06/08 в 08:04
 dDan
maybe SQLite?
цитата
06/06/08 в 08:42
 xreload
Joseph писал:
Пишу небольшой скрипт статов/кликов. Будет работать на довольно большом трафе.

Собственно вопрос - текстовые файлы можно использовать для логов или только БД?

з.ы. при тестировании файл логов порой "обнулялся", но, я думаю дело в моих руках, а не пхп. icon_smile.gif


Любой вариант в принципе приемлем, самое главное руки выровняй icon_smile.gif
цитата
06/06/08 в 10:33
 Gourad
Joseph писал:
Собственно вопрос - текстовые файлы можно использовать для логов или только БД?

Лучше всего использовать Мемкэш или Trivial Database, причем tdb не тот который на sourceforge лежит а тот который в комплекте самбы идет.
цитата
06/06/08 в 19:15
 Zhidrons
Цитата:
при тестировании файл логов порой "обнулялся"
- возможна проблема как раз таки с настройками у хостера (обычно называют - неправильно настроенный модуль определения свободного места icon_smile.gif
цитата
07/06/08 в 01:57
 DF™
Joseph, ты файл хоть флочишь при записи?
цитата
07/06/08 в 02:08
 Cibtor
Joseph писал:
з.ы. при тестировании файл логов порой "обнулялся", но, я думаю дело в моих руках, а не пхп. icon_smile.gif
Вот поэтому и лучше пользоваться любой базой данных, что бы не думать про хранение данных, а сосредоточиться только на алгоритме работы счетчика.
цитата
07/06/08 в 11:27
 Joseph
Спасибо всем за советы. Всем +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();.
цитата
07/06/08 в 11:51
 Sha
При таком алгоритме клики могут проскальзывать.
Не забываем о параллелизме.
Я-бы рекоммендовал файл открывать эксклюзивно, пересчитывать, и закрывать.
При этом надо делать так, чтобы выдача страницы не задерживалась.
цитата
07/06/08 в 13:17
 DF™
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/06/08 в 16:39
 bog
какие то примеры извращенные. куча лишних или непродуманных действий.

по сабжу, на серьезном трафе варианта 2:
логи (текстовый формат).
специализированный демон.

а базы данных стоит использовать только для последующего анализа и хранения данных.

причем судя по приведенным выше кускам кода - ТС действительно лучше БД использовать - так как с такой логикой написания скриптов далеко не уехать. А базы данных множество косяков алгоритма могут сгладить.


Эта страница в полной версии