我正在开发一个应用程序,它需要创建一个存在于大型文本语料库中的非常大的n克数据库。
我需要三种有效的操作类型:查找和插入由n克本身索引,以及查询包含子n克的所有n克。
在我看来,这个数据库应该是一个巨大的文档树,而文档数据库,例如Mongo,应该能够很好地完成这项工作,但我从未在规模上使用过这些数据。
了解Stack Exchange问题的格式后,我想澄清的是,我并不是在征求关于特定技术的建议,而是我应该寻找的一种数据库类型,以便在规模上实现这样的功能。
发布于 2014-08-16 10:25:19
您确定不能只使用lucene或类似的索引技术吗?
倒排索引只存储n克一次,然后只存储包含ngram的文档ids;它们不会将其存储为高度冗余的原始文本。
至于查找包含查询子n-g的ngram,我将在观察到的ngram上构建一个索引,例如使用第二个lucene索引,或者使用任何其他子字符串索引 (如trie或后缀树)。如果您的数据是动态的,那么lucene可能是一个合理的选择,使用短语查询来查找您的n-克。
发布于 2014-08-15 20:22:11
基本上,对于这个任务,您可以在良好支持基于B+tree的索引的情况下有效地使用任何SQL数据库(MySQL将为您所需的完美套件)。
创建3个表:
在n表/n_gram字符串和映射表/n_gram_id上创建索引,主键在默认情况下也会被很好地索引。
你的运作将是有效率的:
您甚至不需要使用联接来完成所有这些操作,所以索引会有很大帮助。另外,如果数据不能放在一台机器上--您可以实现分片方案,比如在一台服务器上存储从and启动的n_grams,在另一台或其他合适的方案上存储or。
您也可以使用MongoDB,但我不确定您需要如何实现索引方案。对于MongoDB,您将获得免费的切分方案,因为它已经内置。
发布于 2014-07-22 00:06:10
我以前没有这样做过,但考虑到您想要的功能,这听起来像是图形数据库的一项工作。下面是ne4j的演示。
https://datascience.stackexchange.com/questions/802
复制相似问题