在非分片数据库中,我可以使用自动增量生成唯一ID来引用特定行。
我想把我的数据库分成几块,然后分成12个分片。现在,当我插入特定分片时,自动增量ID不再是唯一的。
希望听到任何人处理此问题的经验。
答案 0 :(得分:9)
一些方法
1)为每个分片提供自己的ID,并使用复合键
2)为每个分片提供自己的ID并为每个分片设置ID范围
3)使用全球唯一ID - GUID
答案 1 :(得分:2)
我曾经遇到过这种问题的两种方法:
答案 2 :(得分:1)
1)您可以有两行(一行表示ID,第二行表示数据库ID)
2)使用Guids
答案 3 :(得分:0)
我有同样的困境。我想我会选择redis解决方案。我将使用redis-cloud.com之类的服务来生成唯一ID。因此,对于插入到分片表中的每个数据,我仍然可以使用bigint。 IT将是顺序的,因此不会发生页面拆分。此外,现在很容易进行分页。 IT解决了我友好的URL问题,因为我不想在URL中使用GUID。此外,Redis云是一种可扩展的解决方案,非常可靠并且具有自动故障转移功能。
我不需要决定分割我的数据的范围,我只是在主键上使用MD5哈希来在分片之间平均分配数据。对于HA,我决定使用Amazon RDS进行简单的时间点备份/恢复和复制。
我认为Flickr使用相同的技术,但它们有两个生成器,一个用于奇数,另一个用于偶数。
答案 4 :(得分:0)
将数据库保留在consistent hash loop中会有所帮助。这样,您可以确保每个数据库只能处理一定范围的ID。因此,没有两个数据库将具有任何公共ID。这也解决了在系统中添加和删除数据库的问题。