次の設計上の問題があります。
サイズが約10KBのプレーンテキストファイルが100万個あるとします。私の目標は、すべての単語のインデックスを保存する方法を考案して、各単語を特定のテキストファイルとそのファイル内の単語の場所にリンクできるようにすることです。
例:
Text file X contents: "The quick brown fox jumps over the lazy dog"
0 1 2 3 4 5 6 7 8
Text file Y contents: "Now is the time for all good men"
0 1 2 3 4 5 6 7
おおまかに以下を保存したい:
the => {X,0}, {X,6}, {Y,2}
quick => {X,1}
is => {Y,1}
.... and so on
明らかに、私は実際にはプレーンテキストファイルのインデックスを作成していません。私のインデクサーは、「ファイル」、「単語」、「位置」という用語への入力を抽出するマルチスレッドC#アプリケーションです。行数が20億を超えると簡単に増えるため、一般的なルックアップテーブルセットを作成できません。
私の最初のアイデアは、ペア{message、position}を単語自体でプライマリキーが設定されたテキストブロブに格納することでした。ただし、このソリューションでは、すべてのスレッドが{message、position}の新しいペアで「the」の行を更新しようとすると、大きな競合が発生するのではないかと心配しています。
私は自分の環境であるSQLServerExpress 2012にロックされているので、現在の環境で作業してみましょう。データベース自体で何でもできます。実際、私のアプリは通常のワークフローの一部としてデータベースを作成するため、必要に応じてCLRストアドプロシージャをデプロイできます。
アイデア?