Mongodb - 默认索引创建 - 背景构造

时间:2016-05-03 04:19:55

标签: java mongodb indexing spring-mongo

我目前正在使用setInterval

用例 -

写入 - 批量插入集合或每行插入 阅读 - 根据3.2.1 mongo driver version阅读。

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

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

1。)Mongodb是否在后台的 _id 字段中创建了索引。

2。)如果不是,我需要让它在后台创建索引来加固进程。我怎么能以编程方式做到这一点。

也许是这样的,

_id

我遇到了这个link

3 个答案:

答案 0 :(得分:0)

如果您使用的是java api,则以下是正确用法的参考:

http://www.nomad-net.info/

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

如果您使用的是Spring Data MongoDB,则可以使用Index()类上的builder方法来设置背景属性:

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