首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储n-g索引数据的高效数据库模型

存储n-g索引数据的高效数据库模型
EN

Data Science用户
提问于 2014-07-21 23:53:11
回答 3查看 3K关注 0票数 13

我正在开发一个应用程序,它需要创建一个存在于大型文本语料库中的非常大的n克数据库。

我需要三种有效的操作类型:查找和插入由n克本身索引,以及查询包含子n克的所有n克。

在我看来,这个数据库应该是一个巨大的文档树,而文档数据库,例如Mongo,应该能够很好地完成这项工作,但我从未在规模上使用过这些数据。

了解Stack Exchange问题的格式后,我想澄清的是,我并不是在征求关于特定技术的建议,而是我应该寻找的一种数据库类型,以便在规模上实现这样的功能。

EN

回答 3

Data Science用户

发布于 2014-08-16 10:25:19

请参阅Lucene NGramTokenizer

您确定不能只使用lucene或类似的索引技术吗?

倒排索引只存储n克一次,然后只存储包含ngram的文档ids;它们不会将其存储为高度冗余的原始文本。

至于查找包含查询子n-g的ngram,我将在观察到的ngram上构建一个索引,例如使用第二个lucene索引,或者使用任何其他子字符串索引 (如trie或后缀树)。如果您的数据是动态的,那么lucene可能是一个合理的选择,使用短语查询来查找您的n-克。

票数 9
EN

Data Science用户

发布于 2014-08-15 20:22:11

基本上,对于这个任务,您可以在良好支持基于B+tree的索引的情况下有效地使用任何SQL数据库(MySQL将为您所需的完美套件)。

创建3个表:

  1. 文档表,列: id/document
  2. N克表:n克id/n克
  3. N克与文档之间的映射: document_id/n_gram_id

在n表/n_gram字符串和映射表/n_gram_id上创建索引,主键在默认情况下也会被很好地索引。

你的运作将是有效率的:

  1. 插入文档:只需提取所有n克并插入到文档表和n克表中。
  2. 在索引的支持下,快速查找in_gram
  3. 查询包含一个子n克的所有n克:在两个步骤中,只需根据索引查询所有n克,其中包含第2表中的子n克。然后-为每一个n克检索所有相应的文档。

您甚至不需要使用联接来完成所有这些操作,所以索引会有很大帮助。另外,如果数据不能放在一台机器上--您可以实现分片方案,比如在一台服务器上存储从and启动的n_grams,在另一台或其他合适的方案上存储or。

您也可以使用MongoDB,但我不确定您需要如何实现索引方案。对于MongoDB,您将获得免费的切分方案,因为它已经内置。

票数 3
EN

Data Science用户

发布于 2014-07-22 00:06:10

我以前没有这样做过,但考虑到您想要的功能,这听起来像是图形数据库的一项工作。下面是ne4j的演示

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档