Быстро находите строки из файла журнала, ищите в обратном направлении, затем читайте построчно - PullRequest
1 голос
/ 25 марта 2012

У меня есть строки в файле журнала, добавленные в хронологическом порядке.Например, это могут быть данные за последние 30 дней, начиная с 30 дней назад, затем 29 дней назад, затем 28 дней назад и т. Д.

Я хочу прочитать файл в обычном хронологическом порядке, но начиная сопределенная точка (например, начиная с 7 дней назад, считывая данные 7 дней назад, затем данные 6 дней назад, затем данные 5 дней назад и т. д.)

Один из методов - просто читать файл нормально, однако для скоростиПричины, по которым мне нужно: - искать от конца файла в обратном направлении, по экспоненте, чтобы найти правильную точку для начала - затем, как только я нашел правильную точку для начала, прочитать строки одну за другой, в прямом порядке

У меня проблемы с тем, чтобы заставить это работать.Я начал с изменения ответа здесь: Самый эффективный способ поиска последних x строк файла в python

Может ли кто-нибудь помочь или дать совет относительно лучшего способа сделать это?

Ответы [ 2 ]

2 голосов
/ 25 марта 2012

Если скорость вызывает беспокойство, это, вероятно, означает, что вы делаете это много раз или должны делать это на лету.Таким образом, вы можете создать индексный файл, показывающий позицию, которую вы должны seek для каждого дня, что-то вроде:

Day 1: 0
Day 2: 1048576
Day 3: 2097152
Day 4: 6291456
....

Это позволит быстро искать любой день после построения индекса.

Алгоритм обновления этого индекса будет состоять в том, чтобы начинать с позиции последнего известного дня, читать вперед и каждый раз, когда вы достигаете нового дня, добавлять его в индекс.

0 голосов
/ 26 марта 2012

Поскольку строки являются последовательными, вы можете выполнить поиск по полуинтервалу , чтобы очень быстро (порядок записи N) добраться до интересующего начального дня, а затем продолжить чтение оттуда. Например, если в файле журнала содержится миллиард строк, потребуется максимум 30 операций чтения, чтобы найти интересующий день начала ...

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