2

我一直在努力部署一个大型数据库。我已经部署了 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>"

索引:主语、谓语、宾语、主语>谓语、宾语>谓语 分片键:主语、谓语、宾语

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

数据由 Java 程序导入到 Mongos 中。导入这些数据、索引和分片的理想方式是什么?(无需等待一个月即可完成该过程)

4

1 回答 1

1

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

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

根据我的经验,每当 MongoDB 花费的时间比预期的要多时,这是由于以下两件事之一:

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

  2. 对未索引的集合进行操作,这不适用于您的情况。

于 2013-04-08T03:06:42.957 回答