Re: Всего-то работа с логами ...
- From
- Sergey Andrianov (2:5020/1507.400)
- To
- Stanislav Latishko
- Date
- 2002-12-30T22:25:40Z
- Area
- RU.ALGORITHMS
Здравствуй, Stanislav!
Однажды 26-Dec-02 в 17:19 Stanislav Latishko (via gate)
написал All по поводу
-=- Всего-то работа с логами ... -=-
SL> Главная проблема - я сам пока не понимаю чего хочу :)))
SL> Имеется гигантский лог (несколько Гб). В нем меня интересуют
SL> всего несколько сотен строк, но заранее нельзя сказать какие именно.
SL> Да чего я рассказываю ? - все по логам ошибки искали, представляют как
SL> это. Специфика данного случая - размеры лога. Пока вынужден ограничи-
SL> ваться кусками в полгига максимум - с ними я могу работать такими
SL> средствами как grep, head, tail, sed :) Экранный вьюер уже дико
SL> тормозит при контекстном поиске - его я использую после того как
SL> вырезал "интересные" куски по 10-20 метров :)
SL> Т.е. хочется придумать некую экранную смотрелку, с функциями
SL> "обычными" - листание, поиск, перемещение на строку номер ... ,
SL> и дополнительными - скрыть записи определенных типов/из диапазона,
SL> расставить метки и комментарии к определенным записям, скопировать
SL> диапазон в другой файл... Ну и, естественно, он не должен иметь
SL> ограничений по размерам лога.
SL> Kак взяться - слабо представляю. Если я создам на каждую
SL> запись хотя бы 4-байтовый дескриптор - объем этих дескрипторов
SL> уже приблизится к 10% от объема лога. В памяти столько не удержать.
SL> А если и удержать - так они строиться будут черт знает сколько...
SL> Kороче - не представляю за какой конец взяться ...
Начать все-таки следует с постановки задачи. Т.к. требуется только вьювер, а не редактор, то задача существенно упрощается, но все равно определенные сложности имеются. Допустим, ты решишь индексировать, тогда весь файл нужно будет просмотреть, а значит, считать. При скорости чтения с диска порядка 10 Мб/с такая операция при оптимальном написании будет читать 6 Гб ~10 мин. Но с этим еще можно мириться - можно запустить синхронно два процесса: один показывает на экране начальный фрагмент и обеспечивает выполнение запрошенных команд навигации (в пределах уже проиндексированной части), а второй - индексирует до упора, скажем, через 1000 строк.
Хуже другое: скажем, контекстный поиск - те же самые 10 мин в лучшем случае.
Так что сначала следует определить набор операций, которые данный вьювер будет выполнять, а потом разделить их на те, которые могут быть быстро выполнены с помощью индексированного массива (например, поиск строки по номеру), и те, которые не могут (например, контекстный поиск).
Возможно будет проще обрабатывать файл как двоичный.
А откуда берется сам листинг? Ты сам его пишешь? Может, тогда возможно сделать, чтобы все строки имели одинаковыю длину.
До свидания, в 22:13 MSK
Sergey
---
* Origin: Sergiev Posad (2:5020/1507.400)