2011-03-06 45 views
0

我在MongoDB的數據庫中有一個「users」集合。我將使用分片。Mongodb數據庫在分區配置中具有多個唯一索引

除標準_id以外,還有3個其他字段需要進行索引和唯一:用戶名,電子郵件和帳號。所有這些字段中的3個不一定針對每個用戶文檔都存在,在某些情況下不會存在。

我想要字段進行索引,因爲用戶會經常被這些字段之一查找。我希望字段是唯一的,因爲這是一個要求,我寧願不處理這個邏輯客戶端。

據我所知,mongodb和其他數據庫一樣有侷限性,但我希望有一個解決方案,因爲這是一個相當常見的web應用程序設置。

這種場景是否有一個優雅的解決方案?

不知道這個問題是否重要(因爲問題屬於數據庫結構),但我使用的是官方的mongodb C#驅動程序。

回答

3

Mongodb官方文檔說,分片集合必須只有一個唯一索引,並且需要唯一的字段存在。但它也says你也可以選擇有其他唯一索引當且僅當分片鍵是其屬性的前綴。所以你可以試試這個,但是要知道,必須始終存在唯一的密鑰。

我不明白你的業務邏輯,沒有關於用戶的信息會存在。在這種情況下,您可以分割_id並手動執行唯一性檢查。

+0

爲了使分片效率更高,mongos進程需要能夠僅基於文檔選擇分片,然後將寫入僅發送到該分片。要求文檔具有不在分片索引中的唯一密鑰,這意味着必須檢查所有分片。這導致插入效果與最慢的分片一樣慢。你真的有足夠的用戶,你需要分割這張桌子嗎? – 2011-03-07 17:25:09