Leo*_*opd 23 indexing mongodb mongodb-indexes
在mongodb中创建索引时,可以指定background: true
标志,这会导致索引创建为非阻塞.这在生产中非常棒,因为您不希望在创建一个之前显然不需要的索引时锁定整个数据库(因为您没有它).
阅读文档,似乎这个标志只决定了索引是如何创建的,一旦构建完毕,索引的行为就像普通索引一样.这就是我想要的 - 我不希望索引与文档不同步,因为它在后台更新,尽管我可以想象一个数据库可以做到这一点.
我在这里问,因为该getIndexes
命令显示索引background
在创建后仍然标记为.这只是提醒它是如何创建的吗?或者background
索引在创建后表现不同?也许复制有些微妙?
n1c*_*las 24
一旦创建,它们就像常规索引一样.他们坚持getIndexes
只是作为一个提醒,类似于如何unique
,sparse
等等做.
但它也有其他含义.仅仅因为前景索引阻止所有编写器,在这种情况下,在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
}
...
}
]
}
Run Code Online (Sandbox Code Playgroud)
那意味着,后台索引的创建仍在进行中,您还可以看到有关该过程的一些信息.
例如,你可以做一些粗略的计算:1000000中的368640需要1秒(尽可能+1秒),因此一切都需要3-6秒(最终需要4.8秒).
显然,如果您无法看到正在进行的此类操作,则已创建索引.
注意:如果你有许多并发操作,那么你可以为db.currentOp()
fe 指定searсh参数
db.currentOp({"insert.background":1})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12109 次 |
最近记录: |