2013-11-21 49 views
0

我想啓動分片。因爲你知道碎片密鑰非常重要。我發現,MongoDB doesn't ensure unique _id field values when using a shard key other than _id當使用複合分片鍵和_id時,MongoDB確保唯一的_id字段值

在我們的收藏中,用戶名應該是分片鍵。如果我創建複合分片鍵並使用_id作爲分片鍵的第二部分,mongoDB是否能保證_id的唯一性?

+1

它會確保用戶名和_id組合是唯一的,但不是特別的_id – Sammaye

回答

1

MongoDB的不確保跨越碎片獨特_id字段。

The documentation狀態:

MongoDB的可以強制唯一性的片鍵。對於複合分片 密鑰,MongoDB將強制整個密鑰組合的唯一性, 和,而不是分片密鑰的特定組件

因此,如果您希望mongo強制執行電子郵件的唯一性,那麼只需使用電子郵件作爲分片鍵即可。

電子郵件地址有一些隨機性,這是很好的(內置_id has some predictability),但我建議您使用電子郵件字段作爲hashed shard key

+0

在你的例子中,使用'email'的分片鍵是否必須是唯一的?謝謝 – mils

0

MongoDB確保複合鍵所有字段的唯一性。但我不確定這是不是你要找的。如果你有這些文件會發生什麼? {_id:12345,電子郵件:「[email protected]」}和{_id:4567,電子郵件:「[email protected]」}。分片密鑰是唯一的,但您有兩次相同的電子郵件。

如果您正在尋找所有分片上唯一的電子郵件,您可以嘗試使用唯一索引創建代理集合。作爲化合物鍵一起使用時

You have more information here

+0

您提供的鏈接與您的答案相矛盾:「MongoDB將強制整個組合鍵的唯一性,**不針對特定組件**的分片鍵「。 @ Sammaye的評論是正確的答案。 – ixe013

+0

也許我的英語不夠好,但我看不出你在說什麼。我明白分片密鑰的唯一性由兩個字段的組合來保證,所以在我的例子中有兩個獨特的分片密鑰。 但是如果你不想要重複的電子郵件會發生什麼? – rubenfa

相關問題