1. 程式人生 > >mongodb指南(二十一)

mongodb指南(二十一)

預設情況下,ensureIndex()是阻塞型操作,並會暫停資料庫上所有正在進行的其他操作,直到建立索引完成。但是,在高於或等於版本1.3.2的mongodb中,提供了可選的後臺建立索引的選項。

要在後臺建立索引,增加background:true選項。例如:

> db.things.ensureIndex({x:1}, {background:true});
> db.things.ensureIndex({name:1}, {background:true, unique:true,
... dropDups:true});

當後臺模式啟動時,其他的操作,包含寫,在建立索引期間不會被阻塞。該索引在建立完成前不會被應用到查詢中去。

儘管該操作是“後臺”型別意味著其他操作可以併發執行,但是該命令在建立完成前不會立即返回到shell提示符。要同時執行其他操作,可以另外開啟一個mongo shell例項。

需要注意的是,後臺模式建立索引是新增加的方法,它比預設的前端模式要慢:需要更多的時間來建立索引。

在建立索引過程中,可以通過db.currentOp()命令檢視到該操作依舊在進行中(顯示為對system.indexes的插入操作)。你可以使用db.killOp()來終止建立過程。

在建立索引過程中,該索引在system.indexes中是可見的,但是建立完成前它不會被用到查詢操作中。

注意:

  • 每個集合在同一時刻只允許建立一個索引。
  • 一些管理操作,如repairDatabase,不允許在後臺建立索引期間使用。
  • (應用到生產環境,應使用)v1.4或者更高版本。