2

我正在尝试确定众多数据库模型中的哪一个最能支持概率记录比较。具体来说,我有大约 2000 万个由各种属性(名称、类型、作者、所有者等)定义的文档。文本属性在数据集中占主导地位,但仍有大量图像。读取操作是最关键的相对性能,但我预计每周插入大约 20,000 个新文档。幸运的是,插入速度根本不重要,我很乐意将传入的文档排队以进行受控处理。

数据库查询通常采用以下形式:

  • Find documents containing at least five sentences that reference someone who'a a member of the military
  • Predict whether User A will comment on a specific document written by User B, given User A's entire comment history
  • Predict an author for Document X by comparing vocabulary, word ordering, sentence structure, and concept flow

我的第一个想法是使用像MongoDB这样的简单文档存储,因为每个文档不一定包含相同的数据。但是,复杂的查询有效地将其降级​​为文件系统包装器,因为我无法构建产生我想要的结果的查询。因此,这种方法使我不得不遍历整个数据库并分别处理每个文件。尽管文档存储可以很好地横向扩展,但这里的好处并没有体现出来。

这让我意识到我的粒度不在文档级别,而是在实体关系级别。因此,图数据库似乎是合乎逻辑的选择,因为它们有助于将句子中的每个单词与下一个单词、下一段、当前段落、词性等联系起来。图数据库限制了数据复制,提高了统计聚类的速度,并且除其他外,横向扩展。不幸的是,确保您的查询得到明确的答案仍然需要遍历整个图表。即便如此,索引将有助于提高性能。

我还评估了关系数据库的使用,如果设计得当(即通过避免不必要的规范化),它们会非常有效。关系数据库擅长查找用户 A 创作的所有文档,但无法进行结构比较(这涉及昂贵的连接)。关系数据库还有效地强制执行约束(主键、外键、唯一性等)——这是一些 NoSQL 解决方案难以完成的任务。

考虑到上面列出的要求,有没有数据库模型结合了关系模型的“精确性”(,域的有效耗尽)和图数据库的灵活性?

4

1 回答 1

1

这不是一个真正的答案,只是一个讨论。

您所说的数据库是一个大型数据库。您没有提及文档的性质,但报纸文章通常在 2-3k 范围内,因此您谈论的是数百 GB 的原始数据。

如果查询性能是一个问题,那么您谈论的是一个大型且相当昂贵的系统。

您的要求也相当复杂,而且不太可能是开箱即用的。我会考虑一个混合系统。将文档元数据存储在关系数据库系统中,以便您可以通过简单的查询快速访问它们。您可以将文档本身作为 blob 存储在数据库中。

您的某些要求可以通过关系数据库上的文本插件来满足。因此,使用倒排索引技术进行简单的搜索是可行的。这处理了你的三个场景中的第一个。

其他两个更具挑战性。第三个(“预测作者”)可能可以通过一个并行系统来处理,该系统存储作者信息,当它们被加载时从文档中总结出来。然后是使用简单的统计分析(朴素贝叶斯,有人吗?)将文档与作者进行比较的问题。

中间一个很棘手,但它提出了另一个用于管理文档评论的组件。根据音量,这可能容易或困难。

最后,需求变化如何?你真的知道系统应该做什么吗?或者一旦启动并运行,功能会完全不同吗?

于 2012-05-15T00:37:41.747 回答