Mongodb Sharding和Indexing

时间:2013-03-31 20:01:49

标签: mongodb indexing sharding

我一直在努力部署大型数据库。 我已经部署了3个分片群集并开始索引我的数据。 然而,这已经过了16天,我只有一半时间。

问题是,我应该将所有数据导入非分片群集,然后在原始数据在数据库中后激活分片,然后附加更多群集并开始编制索引吗?这会自动平衡我的数据吗?

或者我应该再等16天才能使用当前的方法......

*编辑: 以下是对正在导入的设置和数据的更多解释......

所以我们有1.6亿个像这样的文件

"_id" : ObjectId("5146ae7de4b0d58a864bcfda"),
"subject" : "<concept/resource/propert/122322xyz>",
"predicate" : "<concept/property/os/123ABCDXZYZ>",
"object" : "<http://host/uri_to_object_abcdy>"

索引:主语,谓语,宾语,主语&gt;谓词,对象&gt;谓语 分片键:主题,谓词,对象

设定: AWS上的3个集群(每个集群具有3个副本集),每个节点具有8个GiB RAM (配置服务器位于每个群集中,Mongos位于单独的服务器中)

数据由Java程序导入Mongos。 导入此数据,索引和分片的理想方法是什么。 (没有等待一个月的时间来完成这个过程)

1 个答案:

答案 0 :(得分:1)

如果您正在进行大量批量插入,则在没有索引的情况下执行插入通常会更快,然后索引集合。这与Mongo即时管理索引更新的方式有关。

此外,MongoDB在索引时对内存特别敏感。检查db.stats()中索引的大小,并将数据库连接到Mongo Monitoring Service

根据我的经验,只要MongoDB花费的时间比预期的多得多,就要归功于以下两点之一:

  1. 它耗尽了物理内存或使自己陷入了糟糕的I / O模式。 MMS可以帮助诊断两者。特别查看页面错误图。

  2. 在无索引的集合上运行,但不适用于您的情况。