私は、全文検索用にカスタム CRM ソフトウェアに保存されているメモをインデックス化する、社内で使用するための小さな実験的なユーティリティに取り組んでいます。これらのメモは、Btrieve データベース (NOTES.DAT というファイル) に保存されます。Pervasive の ADO.NET プロバイダーを使用して、データベースに接続し、インデックス作成用のメモを取得することができます。ただし、インデクサーは現在、各メモをループし、5 分ごとに再インデックスを作成します。これは非常に効率が悪いようです。
残念ながら、CRM ソフトウェアがメモが変更されたことをインデックス サービスに通知する方法はありません。これは、データベースがリモート マシンに存在する可能性があるためです (また、開発者は、私と通信するための手順を作成するつもりはありません)。これは今のところ単なる趣味のプロジェクトなので、ネットワーク経由でサービスを提供することはできません)。
あきらめるのではなく、この機会に raw Btrieve データベースについてもう少し学びたいと思います。というわけで、私の計画は…
CRM ソフトウェアは ODBC ドライバーではなく Btrieve API を使用するため、NOTES.DAT ファイルを共有する必要があります (つまり、クライアントのインストールでは、ネットワーク上でファイル自体を認識できる必要があります)。このファイルを (FileSystemWatcher などを使用して) 監視し、変更されたバイトを特定したいと思います。その情報を使用して、その位置のレコードを計算し、その主キーを取得しようとします。次に、インデクサーは、Pervasive の ADO.NET プロバイダーを使用してそのレコードのみを更新します。
問題は (Btrieve ファイルの構造がまだよくわからない、または生データから主キーを決定できるかどうかを除いて) バイトの開始と終了の範囲を決定する方法がわからないことです。 NOTES.DAT で変更されました。
2 つのバージョンを比較することもできますが、それは NOTES.DAT のコピーをどこかに保存することを意味します (そして、それは非常に大きくなる可能性があるため、フルテキスト インデックス サービスが必要になります)。
これを行う最も効率的な方法は何ですか?
ありがとう!
編集: 1 つのトランザクションで複数のメモを追加、編集、または削除する可能性があるため、可能であれば、メソッドは複数の個別のバイト範囲を決定できる必要があります。