Поиск в больших текстовых файлах журнала - PullRequest
3 голосов
/ 19 мая 2010

скажем, у вас есть игровой сервер, который создает текстовые лог-файлы действий геймеров, и время от времени вам нужно что-то искать в этих лог-файлах (например, расследовать мошенничество или потерять предмет). Например, у вас есть 100 файлов, и каждый файл имеет размер от 20 до 50 МБ. Как бы вы быстро их искали?

То, что я уже пытался сделать, - это создать несколько потоков, и каждый отдельный поток отобразит свой файл в память (допустим, память не должна быть проблемой, если она не превышает 500 МБ ОЗУ). секунда на файл:

Файл: a26.log - чтение: 0,891, строки: 625282, совпадения: 78848

Есть ли лучший способ, как это сделать? - потому что это кажется мне немного медленным. спасибо.

(для этого случая использовалась Java)

Ответы [ 5 ]

2 голосов
/ 19 мая 2010

Тим Брей исследовал подходы к обработке файлов журнала Apache здесь: http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder

Похоже, что с вашей ситуацией может быть много общего.

1 голос
/ 19 мая 2010

Вы можете использовать комбинации команд Unix с find и grep .

0 голосов
/ 19 мая 2010

Я, наверное, должен упомянуть, что в первом посте игровой сервер написан для Win64x - и мне интересно, находится ли он на одном уровне производительности, как grep для Windows и для Unix?

0 голосов
/ 19 мая 2010

Для специального поиска больших текстовых файлов я бы использовал утилиты UNIX grep, fgrep или egrep. Они были вокруг долгое время, и многие люди работали над ними, чтобы сделать их быстрыми.

С другой стороны, основным узким местом в текстовых файлах поиска (которые ранее не были проиндексированы) будет скорость, с которой приложение + операционная система может перемещать данные из файла диска в память. Похоже, вы управляете 20 МБ или более в секунду, что кажется достаточно быстрым ... тоже мне.

0 голосов
/ 19 мая 2010

Конечно, есть лучший способ: вы индексируете содержимое перед поиском. То, как вы индексируете, зависит от того, как вы хотите искать в журналах, но в целом вы могли бы преуспеть, используя Lucene (или Solr , если записи журнала могут быть легко преобразованы в xml документы).

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

Все это предполагает, что вы просматриваете каждый файл много раз. Если это не так, вы можете также grep файлы и покончить с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...