ITPub博客

首页 > 数据库 > 数据库开发技术 > Mongodb背景索引 – 它们是否仍然创建背景?

Mongodb背景索引 – 它们是否仍然创建背景?

原创 数据库开发技术 作者:后端Q 时间:2021-06-17 00:00:00 0 删除 编辑

在 mongodb中创建索引时,可以指定背景:true标志,这将导致索引创建为非阻塞.这是非常好的生产,因为你不希望整个数据库锁定,同时创建一个你显然没有严格需要的索引(因为你没有). 阅读docs,似乎这个标志只能确定索引是如何创建的,一旦它被完成,索引就像一个正常的索引一样.我想要什么 – 我不希望索引与文档不同步,因为它在后台更新,虽然我可以想象一个数据库,这样做.

我在这里问,因为getIndexes命令显示索引仍然被标记为背景,即使创建它之后.这只是一个提醒,它是如何创建的?或者后台索引在创建后的行为有所不同?也许有些微妙的复制?

创建后,它们就像常规索引一样.他们坚持在getIndexes提醒,类似于独特,稀疏等等. 但它也有其他含义.只是因为前台索引阻止所有写入器,在这种情况下,直到创建所有索引为止,才能执行db.testCollection.getIndexes().同时,当您创建后台索引时,您可以调用db.testCollection.getIndexes(),并且您将看到该索引似乎已经创建.

但在这种情况下,我们无法确定索引是否实际创建.在这种情况下,你需要调用db.currentOp(),如果你看到类似的东西

{
  "inprog": [
    {
      "opid": 2001060,
      "active": true,
      "secs_running": 1,
      "op": "insert",
      "ns": "test.system.indexes",
      "insert": {
        "v": 1,
        "key": {
          "a": 1
        },
        "ns": "test.testCollection",
        "name": "a_1",
        "background": 1
      },
          ....
      "msg": "bg index build Background Index Build Progress: 368640/1000000 36%",
      "progress": {
        "done": 368640,
        "total": 1000000
      }
      ...
    }
  ]
}

那么这意味着,后台索引的创建仍在进行中,您还可以看到有关进程的一些信息.

例如,您可能会做一些粗略的计算:1000000中的368640需要1秒(1秒可能的偏移量),因此一切都需要3-6秒(最终需要4.8秒).

显然,如果您看不到这样的操作,那么索引已经被创建了.

注意:如果有许多并发操作,那么可以指定db.currentOp(),f.e的searref参数.

db.currentOp({"insert.background":1})


原文作者:后端Q;如有侵权,请联系管理员删除。

上一篇: hangfire入门
请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    725985