2012-03-25 6 views
1

ログファイルに行があり、時系列で追加されています。たとえば、30日前から30日前、29日前、28日前などのデータが過去30日間のデータである可能性があります。ログファイルから行をすばやく見つけ、後方に検索し、行ごとに読み取る

通常の順番でファイルを読みたいと思いますが、 (例:7日前から7日前、次に6日前、5日前など)

1つの方法はファイルを普通に読むことですが、スピードの理由から、 To: - に開始するように後方に、指数関数的に、右のポイントを見つけるために、ファイルの末尾から求めて - そして、私はラインを一つずつ読んで、で開始する権利ポイントを見つけたら、前方の順に

これを動作させるのに問題があります。私はここで答えを変更し始めました: Most efficient way to search the last x lines of a file in python

誰かがこれを行うためのより良い方法について助けてくれるのでしょうか?

+0

ログファイルを複数のファイルに分割することを検討します実行可能な最初から求めている。 –

+4

(オプションを持っている場合つまり、)私はあなたの計画は、その時点から*全体*ファイルを読むために、その後であることを考えると、*指数関数*後方読んで多くのポイントがないと思います。逆に指数関数的に読んだり、バイナリ検索をしたりすると、O(log N)時間に最初に必要な行を見つけるのに役立ちますが、O(N)その時点から線を読む時間。 – ruakh

答えて

2

スピードが懸念される場合は、何度もやっている、またはオンザフライで行う必要があることを意味します。

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

インデックスが構築されると、これは、任意の日の高速検索を可能にする:したがって、あなたは、のようなものを日ごとにseekににあなたが持っている位置を示すインデックスファイルを構築することができます。

このインデックスを更新するためのアルゴリズムは、最後の既知の日の位置で開始前方に読み、そしてあなたは新しい一日に達するたびに、インデックスに追加することです。線として

0

あなたはhalf-interval search関心の開始日を取得した後、そこから前方に読んで(ログNの順)非常に迅速に行うことができます連続しています。たとえば、ログファイルに10億行がある場合は、開始日を探すのに最大30回の読み込みが必要です。

関連する問題