これが私が抱えている問題です。ログのセットがかなり急速に大きくなる可能性があります。それらは毎日個々のファイルに分割され、ファイルのサイズは簡単にギグにまで大きくなります。サイズを抑えるために、30 日ほど前のエントリは消去されます。
問題は、これらのファイルで特定の文字列を検索する場合です。現在、Boyer-Moore 探索は実行不可能なほど遅いです。dtSearch のようなアプリケーションがインデックス作成を使用して非常に高速な検索を提供できることは知っていますが、ログがすでに占有しているスペースの 2 倍を消費せずにそれを実装する方法がよくわかりません。
確認できる参考になるリソースはありますか? インデックスを作成し、それを使用して検索するために何をすべきかを説明する標準アルゴリズムを本当に探しています。
編集:
この検索はクロスプラットフォーム アプリケーションに統合する必要があるため、grep は機能しません。外部プログラムを含めてスイングできる方法はありません。
それが機能する方法は、ログ ブラウザーを備えた Web フロント エンドがあることです。これは、カスタム C++ Web サーバー バックエンドと通信します。このサーバーは、妥当な時間内にログを検索する必要があります。現在、数ギグのログを検索するには時間がかかります。
編集 2: これらの提案のいくつかは素晴らしいものですが、別のアプリケーションを統合できないことを繰り返し述べなければなりません。これは契約の一部です。ただし、いくつかの質問に答えるために、ログ内のデータは、ヘルスケア固有の形式で受信したメッセージまたはこれらに関連するメッセージのいずれかによって異なります。インデックスの再構築には最大 1 分かかる場合がありますが、現在、検索には非常に長い時間がかかるため (最大 2.5 分かかることがわかりました)、インデックスに依存することを検討しています。また、多くのデータは、記録する前に破棄されます。一部のデバッグ ログ オプションがオンになっていない限り、ログ メッセージの半分以上が無視されます。
検索は基本的に次のように行われます: Web フォーム上のユーザーには、最新のメッセージのリストが表示されます (スクロールするとディスクからストリーミングされます。ajax の場合はそうです)。それは、おそらく患者ID、または送信した文字列であり、その文字列を検索に入力できます。検索は非同期的に送信され、カスタム Web サーバーは一度に 1MB ずつログを直線的に検索して結果を取得します。ログが大きくなると、このプロセスに非常に長い時間がかかることがあります。そして、それは私が最適化しようとしているものです。