mongodb 创建索引需要很长时间

von4xj4u  于 2023-03-01  发布在  Go
关注(0)|答案(3)|浏览(1176)

我在MongoDB中创建了一个由11446615文档组成的集合。
每份文件的格式如下:

{ 
 "_id" : ObjectId("4e03dec7c3c365f574820835"), 
 "httpReferer" : "http://www.somewebsite.pl/art.php?id=13321&b=1", 
 "words" : ["SEX", "DRUGS", "ROCKNROLL", "WHATEVER"],     
 "howMany" : 3 
}

httpReferer:只是一个网址
words:从上面的url解析的单词。列表的大小在15和90之间。

我计划使用这个数据库,以获得具有类似内容的网页列表。
我将通过使用wordsfield查询这个集合,所以我在这个字段上创建了(或者更确切地说是开始创建)索引:

db.my_coll.ensureIndex({words: 1})

我开始创建索引约3小时前,它似乎不像它可以在另一个3小时完成。
我怎样才能提高索引的速度?或者也许我应该使用完全不同的方法来解决这个问题?欢迎任何想法:)

vwoqyblh

vwoqyblh1#

不,索引对于大的集合来说是很慢的。你也可以在后台创建索引:
db.my_coll.ensureIndex({words:1}, {background:true});
在后台创建索引会比较慢,而且会导致索引比较大。但是,在索引完成之前,它不会被使用,因此在此期间,您可以正常使用数据库,索引不会阻塞。

neskvpey

neskvpey2#

背景索引也有一些问题。
1.如果有的话,它应该需要更长的时间,由于负载在您的服务器上。
1.如果由于某种原因中断,它将作为前台构建重新启动
如果你有一个副本集,我更喜欢做一个“滚动索引构建”。
1.从副本集中取出辅助副本
1.构建索引
1.将辅助副本插回副本集中
我认为这是最干净的解决办法。

yizd12fk

yizd12fk3#

我也遇到了同样的问题,通过以下步骤解决了这个问题。
1.重命名这集合你正在尝试创建索引.

数据库<existing_collection>.重命名集合(“<rename_collection>“);

1.执行索引查询。

数据库<existing_collection>.创建索引({<option_goes_here>});

1.将数据从rename_collection传输到existing_collection。

数据库<rename_collection>.查找().forEach(函数(文档){数据库<existing_collection>.插入(文档);});

1.删除重命名的集合集合

数据库.<rename_collection>.删除();

相关问题