确保分片 Mongo 集合上的唯一索引

Ensuring unique index on a sharded Mongo collection

我已经使用 ObjectId 字段“_id”作为分片键对我的 mongo 集合进行了分片。 我的需要是确保此集合的唯一索引。

遗憾的是,您无法在分片集合上创建唯一索引。

MongoDB 建议:

Use a secondary collection to enforce uniqueness. docs

但是由于 mongoDB 不支持事务,因此总是会出现一致性问题,因为 mongoDB 不支持事务。

例如,

听起来很简单,但是!

如果您成功插入 Sample_proxy 并且在实际插入之前,机器停机了。 不能原子地查看两个不同的集合。 我看不出有什么方法可以完全消除不一致。

如果有解决办法,请赐教

Peeking into two different collections cannot be done atomically

原来可以做到。我使用分布式锁来防止问题中提到的潜在不一致,使用 Apache Zookeeper(具体来说是 Curator Framework)

注意: 使用分布式锁很容易成为任何分布式系统吞吐量的瓶颈。 关键是只有在绝对必要时才锁定