Алгоритм логов.

Opik

Новичок
Алгоритм логов.

Не стал поднимать свою старую тему. там много лишнего. Надеюсь не смертельно =)
К делу. Не буду писать как сделано сейчас. сделаю как думаю.

Собственно какие логи:
Логи боев, кто, кого, во сколько и куда ударил.

Хочу сделать на 1 бой - 1 файл. "свежие" удары писать сверху. (Т.к в текущем бою нужно выводить 10-15 последих записей). И гораздо проще серверу прочитать первые 10 строк, чем последние.

Ещё один вопрос - ЧТО хранить в логах.
а) готовый текст, который нужно просто вывести. (проблема в объеме)
б) "код" текста. т.е хранить через разделитель только данные. и потом их постоянно собирать в читабельный вид (когда логов много - довольно частая операция, которую в принципе можно избежать при методе а) . т.е меньше грузить и без того нагруженный сервер.) не самое узкое место, но тем не менее.

Как считаете?
 

Opik

Новичок
100 боев - большая таблица. с уже замедленной скоростью обработки.
100 боев - 100 файлов - всё равно в принципе. файлы обрабатывать. объем сравнительно не большой и должно быть всё шустро. собтвенно поэтому и склонняюсь к файлам.
 

Solid

Drosera anglica
Тоже кажеться, что MySQL-сборка - самый оптимальный вариант.
 

white phoenix

Новичок
Opik
> ...
Копирайт поставишь? :D
На самом деле файлы для данной задачи в любом случае медленее чем СУБД. Не спрашивай почему, просто поверь.
 

Opik

Новичок
Ладно. верю. пусть будет медленее.
Но как тогда сделать? Ведь в 1 таблицу не будешь же все городить. Можно конечно разбить на 2 таблицы - текущая, и архивная. Других вариантов видимо нет.
 

Solid

Drosera anglica
Сколько будет записей в таболице? Я не думаю, что больше 100 тыс. При 100 тыс. тормозов точно не будет... По любому, если будешь писать в файлы, в последствии будет тормозить файловая система.. а это ещё хуже.
 

white phoenix

Новичок
Opik
В одну таблицу. Для снижения нагрузки на СУБД при запросах, время от времени переноси в архивную таблицу записи с законченными боями.
Solid
> При 100 тыс. тормозов точно не будет...
No comments.
 

Opik

Новичок
Ну сейчас у меня сделано так: текущий лог идет в мемкеш.
а потом уходит в базу.
В базе уже 2617830 записей. что больше 100 тыс =)))
файловая система тормозить не будет, если разбивать по папкам (я так думаю. хотя может обишаюсь)
 

Solid

Drosera anglica
Автор оригинала: white phoenix
Opik
В одну таблицу. Для снижения нагрузки на СУБД при запросах, время от времени переноси в архивную таблицу записи с законченными боями.
Solid
> При 100 тыс. тормозов точно не будет...
No comments.
Хм... Если таблица вида:
id, bid, text
где id - int, bid - int, text - char(255)
томрозов не будет точно, конечно если машина не pent II 200mhz с 32мб ОП на борту. Правда с другой стороны ещё сильно зависит от настроек mysql сервера, но т.к. я предполагаю, что сервер настроен стандартным образом, т.е. storage engine ISAM или MyISAM.
При >100 записей такого вида уже потребуется BerkeleyDB + большие выделения оперативной памяти.

-~{}~ 27.01.06 01:11:

Кстати, смотрел benchmark'и mysql и sqlite: иногда lite выигрывает. Так что, думаю, стоит попробовать.
Но файловую систему использовать строго не рекомендуется. Торможение - раз, во вторых сложность обработки (составление отчётов) и т.д. Много минусов, плюсов почти нет.
 

Renny

Новичок
Я тут единственный думаю, что БД все в файлах хранит? :)))
А что бы из юазы быстрее дергать информацию, надо некоторые поля индексировать.
 

Dreammaker

***=Ф=***
Renny, в некоторых случаях индексация даёт больший вред чем пользу. При частых вставках - перестройка индексов будет занимать львиную долю времени и бывает на больших таблицах выгоднее отказаться от индексов, чем использовать их. Но тут нужно смотреть на результаты эксплейна.
 

white phoenix

Новичок
Solid
Ты правда такой каким кажешься, или ты придуриваешься?
Renny
>Я тут единственный думаю, что БД все в файлах хранит? )
Ты прав. Но в СУБД более быстрый механизм, и кеширование. При работе с файлами надо каждый раз писать на жесткий диск, а это очень кладно, в то время как СУБД сносит буфера на диск лишь время от времени.
>А что бы из юазы быстрее дергать информацию, надо некоторые поля индексировать.
Индексы хороши когда преобладают запросы выборки (SELECT), а когда частый (INSERT, UPDATE), то можно серьезно проиграть в скорости.
 

Solid

Drosera anglica
Интересно, чем это я придуриваюсь? То что говорю, что то что думаю и знаю? Мне кажется, это не тот форум, где можно выяснять отношения. Так что давай впредь больше не будем касаться данной темы.

-~{}~ 27.01.06 07:51:

Впринципе у меня всегда ответы такие, какие вопросы. Так что ты не в ту сторону смотришь.

-~{}~ 27.01.06 07:57:

Только лишь кеширование и "более быстрый механизм"? Смотря какой движёк для хранения информации выберешь.
...Данные можно расположить в оперативной памяти, от чего скорость выборки/вставки возрастает даже не в несколько раз.

-~{}~ 27.01.06 08:00:

Впринципе то, что тебе надо: http://dev.mysql.com/doc/refman/5.0/en/archive-storage-engine.html
+ компрессия
- медленный select
 

С.

Продвинутый новичок
Re: Алгоритм логов.

Автор оригинала: Opik
Хочу сделать на 1 бой - 1 файл. "свежие" удары писать сверху. (Т.к в текущем бою нужно выводить 10-15 последих записей). И гораздо проще серверу прочитать первые 10 строк, чем последние.
Серверу как раз совершенно все равно, последние или первые строки читать. А вот писать в конец однозначно проще, чем в начало.
 

Solid

Drosera anglica
Как я понимаю, у тебя есть таблица, где есть слова:
id - int
word - char(255)
примерно так, да?
Тогда поставь barkley engine, выставь там побольше выделяемой памяти и вперёд.
battle: id, sid (step)
step: id, wid (word)
 
Сверху