2014-11-24 22 views
0

我們需要在非常短的時間表內分割我們的生產數據庫,現在我們已經決定在散列(_id)上分片 - 但是,我們已經看到無法在這樣的索引上創建唯一約束。是否有可能確保MongoDB中分片哈希鍵的唯一性?

是否有可能以任何其他方式確保100%的時間我們永遠不會插入具有相同_id的重複文檔?

我們已經考慮添加2個索引,1個用於分片鍵(散列(_id)),另一個用作默認唯一_id索引 - 但我們不確定這是否可行/將解決我們的問題。

在此先感謝!

+0

請閱讀http://docs.mongodb.org/manual/tutorial/enforce-unique-keys-for-sharded-collections/ _thoroughly_。 – 2014-11-24 12:16:58

+0

tl; dr:ObjectIds是_guaranteed_是唯一的,並且哈希碰撞比連續贏得連續時間的抽籤更不可能。如果每秒散列大約60億份文件,100年後你將有50%的機會產生碰撞。幾乎所有的實際目的,這應該是足夠的。 – 2014-11-24 12:27:05

+0

@ MarkusWMahlberg - 我意識到這一點,我問是否有解決方法。 – Ron 2014-11-24 13:47:16

回答

1

好吧,我們的解決方案是在_id(每個Mongod/Shard實例有一個強制唯一索引)分片並添加一個我們分解的散列(_id)索引。這確保了所有項目都是獨一無二的。

相關問題