2013-10-30 32 views
3

蒙戈文檔讀:在MongoDB中,唯一索引對分片鍵的實際限制是什麼?

分片系統不能執行集羣範圍唯一索引除非 唯一字段是在片鍵。

從這裏:http://docs.mongodb.org/manual/core/sharding-shard-key/

不過,這是相當模糊的,我如果在片鍵應該是完全唯一索引,也可以是唯一索引的前綴。

我在這個特定主題上找到了很多參考,但不幸的是,我找不到一個好的「DO和DO NOT」示例。

總之,我的問題將駐留在下面的例子: 上的字段{A,B,C},下列哪項碎片鍵是正確的給予蒙戈集合具有唯一索引:

A. {a}
B. {a,b,c}
C. {a,b,c,d}
D. {a,b,d}?

非常感謝。

+0

分片密鑰可以是唯一的,但不必是,即可以存在狀態的分片密鑰。正常情況下,碎片越有選擇性越好。我沒有回答你,因爲我不知道你的查詢或文件中的數據 – Sammaye

回答

4

這個限制的原因是它必須有可能讓分片檢查重複而不必與其他分片通信。

這意味着它必須清楚它的剩餘碎片索引的每個可能的值。一個分片只能確定一個值是唯一的,當一個碰撞的文檔也將被存儲在它自己。

這意味着當分片鍵僅僅是索引的一部分時是可以的,但是當索引只是分片鍵的一部分時就不行。

對於您的示例,分片鍵A和B可以工作,但C和D不會。當場景C或D中的分片將收到一個文檔,其中的字段a,b和c與它所具有的任何內容不匹配時,仍可能有一個文檔在a,b和c上具有相同的值,但d的值不同在另一個碎片上。

相關問題