Mongodb - 默认索引创建 - 后台构建

Mongodb - Default Index Creation - Background Construction

我目前正在使用 3.2.1 mongo driver version

用例 -

Write - 在集合中批量插入或按行插入 阅读 - 在_id的基础上阅读。

不需要额外的索引,mongodb 在 _id 字段上创建的默认索引就足够了。

问题 - 我的 Mongo 服务(调用 mongodb)占用了过多的 CPU 负载。

1.) Mongodb 是否在后台对 _id 字段创建索引。

2.) 如果没有,我需要让它在后台创建索引以加快进程。我怎样才能以编程方式做到这一点。

可能是这样的,

collection.createIndex(new BasicDBObject("_id", 1),new BasicDBObject("background", true));

我遇到了这个link

如果您使用的是java api,这里是正确用法的参考:

http://api.mongodb.org/java/3.0/com/mongodb/client/MongoCollection.html?_ga=1.119232521.1817714352.1461227368#createIndex-org.bson.conversions.Bson-

http://api.mongodb.org/java/3.0/com/mongodb/client/model/IndexOptions.html

基本上您需要使用 api 的 IndexOptions 正确提供背景选项。

运行在后台设置索引不会使插入 运行 更快,相反,它 运行 更慢。但是,查询将是异步的,因此允许您的应用程序同时进行 运行 其他查询。

您可以尝试以下方法来提高批量插入的性能

  • 创建一个允许在辅助节点上读取的副本。这将在主节点上插入 运行ning,而读取将定向到辅助节点。 运行在后台建立索引在这种情况下会有所帮助。在这种情况下,避免读取陈旧数据很重要。
  • 创建一个与您要插入的数据的形状配合良好的新索引。
    • 使用集合上的键变体创建多个索引。
    • 运行 对小型数据集的插入查询。 Mongo 将分析所有 集合中可用的索引,然后选择执行该操作的索引 最适合您要插入的数据的形状。
    • 运行 db..explain("executionStats") 在查询中找出 正在使用哪个索引。
    • 删除所有其他索引,因为它们会影响您的插入性能。
    • 运行 您的完整查询并查看它如何使用新索引执行。

如果您正在使用 Spring 数据 MongoDB 那么您可以使用 Index() class 上的构建器方法来设置背景 属性:

new Index(CREATED_DATE_FIELD_NAME, Sort.Direction.DESC).background();