我有以下设计问题:
假设我有 100 万个大小约为 10KB 的纯文本文件。我的目标是设计一种方法来存储所有单词的索引,这样我就可以将每个单词链接到特定的文本文件和单词在所述文件中的位置。
例子:
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} 存储在以单词本身为主键的文本 blob 中。然而,有了这个解决方案,当我的所有线程都尝试用新的 {message,position} 对更新“the”的行时,我担心会有很大的争用。
我被锁定在我的环境中,SQL Server Express 2012,所以让我们使用我们所拥有的。我可以对数据库本身做任何事情,事实上我的应用程序创建数据库作为正常工作流程的一部分,因此如果需要我可以部署 CLR 存储过程。
想法?