MongoDB中的字数

时间:2012-01-19 21:44:03

标签: java mongodb

我正在尝试为已处理的纯文本Wikipedia转储创建共现计数集合。我正在使用MongoDB的Java API,我的文档结构非常简单:

{w:word1#word2,c:count}

我有一个关于“w”的索引,并且正在使用查询更新我遇到的每一对的计数:

coll2.update(new BasicDBObject("w",word), new BasicDBObject("$inc",new BasicDBObject("c",1)),true,false);

我是否可以采取其他任何优化来加快字数统计过程?我目前大约有2700万个单词对,而且从“mongod”终端我看到无休止的查询流在100-1000毫秒之间(我认为是“慢”)。通过我的Google,MapReduce方法似乎是解决大字数问题的常用方法。但是我对MapReduce知之甚少,从我的基本理解来看,我需要不止一台机器(我没有)。

谢谢, 安东尼

1 个答案:

答案 0 :(得分:0)

理论上你的方法很好,只要你完全匹配“w”字段。 如果使用正则表达式或其他,则可能无法有效使用索引。 您可以使用explain()运行等效的find来检查索引行为。

还要确保“w”上的整个索引可以适合RAM以及大多数文档。 如果mongo需要从磁盘读取更新文档,它将变得非常慢,具体取决于您的磁盘。

潜在的解决方法:

  • 在客户端进行一些计数(使用hashmap),然后在每个文档处理结束时插入。
  • 你可以试试map reduce。您将获得它在数据库中执行。但它需要执行javascript,最终可能会更慢。即将推出的是mongo 2.2中的聚合框架和MR改进。当你试用它们时它们都很容易使用。