2013-01-15 41 views
3

這裏引用的指南,​​我不知道是否Mongo索引的字段是永久存儲的。MongoDB索引在重新啓動時是否持久?

如果ensureIndex()被稱爲(並完成)使用MongoDB應用程序中,會發生什麼,如果:

  1. 使用MongoDB重新啓動應用程序。隨後撥打ensureIndex()會導致完全重建索​​引嗎?
  2. MongoDB服務器重新啓動。從客戶端應用程序重建ensureIndex()稍後的調用?
  3. 這是否受到多個客戶端會話的影響?我認爲索引橫跨每個文檔的整個集合全球:"MongoDB defines indexes on a per-collection level."
+0

你有分拆或複製嗎? –

+0

會影響這些情況嗎?我在問這個簡單的例子,但你激起了我的興趣。 –

回答

4

使用MongoDB的應用程序被重新啓動。後續調用ensureIndex()會導致完整的reindex?

不,它應該(與其他驅動程序一樣)註冊爲無操作,因爲索引已經存在。一些驅動程序提供了一種緩存機制來檢測,而不必去服務器,是否已經創建了索引(即Python)。

MongoDB服務器重新啓動。客戶端應用程序重新調用ensureIndex()後,會重新調用嗎?

同上

任何的這種影響具有多客戶端會話?我假設每個文檔的索引在整個集合中都是全局的:「MongoDB在每個集合級別上定義索引。」

是索引存儲在MongoDB的集合本身(是技術,如db.ns文件中的命名空間)。由於它是ensureIndex的單一知識點,並且索引是單個進程(很像寫入鎖真的),因此多重連接不應影響索引創建是否註冊兩次。

+0

感謝您的回答。 MongoDB對索引持久性不太清楚。 – Ceki

相關問題