8

これが私が抱えている問題です。ログのセットがかなり急速に大きくなる可能性があります。それらは毎日個々のファイルに分割され、ファイルのサイズは簡単にギグにまで大きくなります。サイズを抑えるために、30 日ほど前のエントリは消去されます。

問題は、これらのファイルで特定の文字列を検索する場合です。現在、Boyer-Moore 探索は実行不可能なほど遅いです。dtSearch のようなアプリケーションがインデックス作成を使用して非常に高速な検索を提供できることは知っていますが、ログがすでに占有しているスペースの 2 倍を消費せずにそれを実装する方法がよくわかりません。

確認できる参考になるリソースはありますか? インデックスを作成し、それを使用して検索するために何をすべきかを説明する標準アルゴリズムを本当に探しています。

編集:
この検索はクロスプラットフォーム アプリケーションに統合する必要があるため、grep は機能しません。外部プログラムを含めてスイングできる方法はありません。

それが機能する方法は、ログ ブラウザーを備えた Web フロント エンドがあることです。これは、カスタム C++ Web サーバー バックエンドと通信します。このサーバーは、妥当な時間内にログを検索する必要があります。現在、数ギグのログを検索するには時間がかかります。

編集 2: これらの提案のいくつかは素晴らしいものですが、別のアプリケーションを統合できないことを繰り返し述べなければなりません。これは契約の一部です。ただし、いくつかの質問に答えるために、ログ内のデータは、ヘルスケア固有の形式で受信したメッセージまたはこれらに関連するメッセージのいずれかによって異なります。インデックスの再構築には最大 1 分かかる場合がありますが、現在、検索には非常に長い時間がかかるため (最大 2.5 分かかることがわかりました)、インデックスに依存することを検討しています。また、多くのデータは、記録する前に破棄されます。一部のデバッグ ログ オプションがオンになっていない限り、ログ メッセージの半分以上が無視されます。

検索は基本的に次のように行われます: Web フォーム上のユーザーには、最新のメッセージのリストが表示されます (スクロールするとディスクからストリーミングされます。ajax の場合はそうです)。それは、おそらく患者ID、または送信した文字列であり、その文字列を検索に入力できます。検索は非同期的に送信され、カスタム Web サーバーは一度に 1MB ずつログを直線的に検索して結果を取得します。ログが大きくなると、このプロセスに非常に長い時間がかかることがあります。そして、それは私が最適化しようとしているものです。

4

6 に答える 6

5

grep通常、大きなログ(場合によっては12G以上)でうまく機能します。Windows 用のバージョンもここにあります。

于 2008-10-02T18:21:25.883 に答える
2

ほとんどの場合、ある種のインデックス検索エンジンをアプリケーションに統合したいと思うでしょう。数十種類ありますが、Luceneはとても人気があるようです。その他の提案については、次の 2 つの質問を確認してください。

カスタム Web アプリとの統合に最適なテキスト検索エンジンは?

Web サイトに検索機能を実装するにはどうすればよいですか?

于 2008-10-02T18:34:22.107 に答える
2

Lucene が使用するアルゴリズムを確認してください。ただし、それらは非常に単純ではない可能性があります。むかしむかし、これらのアルゴリズムのいくつかを研究しなければなりませんでした。そのうちのいくつかは非常に洗練されています。

索引付けするテキスト内の「単語」を特定できる場合は、単語のハッシュを各ファイル内の出現箇所にマップする、単語の大きなハッシュ テーブルを作成するだけです。ユーザーが同じ検索を頻繁に繰り返す場合は、検索結果をキャッシュします。検索が完了したら、各場所をチェックして、一致するハッシュを持つ単語だけでなく、検索語がそこにあることを確認できます。

また、インデックスがファイル自体よりも大きいかどうかを本当に気にする人はいますか? あなたのシステムが本当にこれほど大きく、非常に多くのアクティビティがある場合、1 つのインデックスに数十ギガを費やすだけで終わりでしょうか?

于 2008-10-02T19:19:51.297 に答える
0

BSD のソースをチェックアウトすることをお勧めしgrepます。grep がそこにあることに頼ることはできないかもしれませんが、同様の機能を再現できないとは言いませんよね?

于 2008-10-02T20:08:52.160 に答える
0

実行している検索の種類に関する詳細は、間違いなく役立ちます。ログがロールオーバーするたびに毎日インデックスを再構築する必要があるため、特にインデックスに依存する必要があるのはなぜですか? これらのログにはどのような情報が含まれていますか? 記録される前に、その一部を破棄できますか?

現在、これらの検索にどれくらいの時間がかかっていますか?

于 2008-10-02T18:29:58.700 に答える
-2

Splunkは、大量のログを検索するのに最適です。あなたの目的にはやり過ぎかもしれません。処理するデータの量 (ログのサイズ) に応じて料金が発生します。彼らにはAPIがあると確信しているので、使いたくない場合はフロントエンドを使用する必要はありません.

于 2008-10-02T18:34:55.117 に答える