我使用ObjectId字段“ _id”作为分片键对mongo集合进行了分片。 我需要确保此集合的索引唯一。
不幸的是,您无法在分片集合上创建唯一索引。
MongoDB建议:
使用辅助集合来强制唯一性。 docs
但是由于mongoDB不支持事务,因此始终存在一致性问题,无法克服该方法。
例如,
听起来很安全,但是!
如果您成功插入 Sample_proxy ,并且在实际插入之前机器掉线了怎么办。 窥探两个不同的集合不能原子地完成。 我看不出有什么方法可以完全消除不一致之处。
如果有解决方案,请赐教。
答案 0 :(得分:0)
不能原子地查看两个不同的集合
原来可以做到。我使用Apache Zookeeper(具体来说是Curator框架)来使用分布式锁来防止问题中提到的潜在矛盾
注意: 采用分布式锁很容易成为任何分布式系统吞吐量的瓶颈。 关键是只有在绝对必要时才锁定。