在非分片数据库中,我可以使用自动递增来生成唯一的ID以引用特定行。
我想将我的数据库进行分片,比如分成12个分片。现在当我插入到特定的分片时,自动递增ID不再是唯一的。
希望听到任何人处理这个问题的经验。
我想将我的数据库进行分片,比如分成12个分片。现在当我插入到特定的分片时,自动递增ID不再是唯一的。
希望听到任何人处理这个问题的经验。
几种方法
1) 给每个分片分配一个独立的ID,使用复合键。
2) 给每个分片分配一个独立的ID,并为每个分片设置ID范围。
3) 使用全局唯一标识符 - GUID。
我用过的两种解决这类问题的方法:
1)你可以使用两行(一行表示ID,另一行表示数据库ID)
2)使用Guids
我有同样的困惑。我想我会选择一个redis解决方案。我将使用像redis-cloud.com这样的服务来生成唯一的id。所以我仍然可以为插入到我的分片表中的每个数据使用bigint。它将是顺序的,因此不会发生页面拆分。此外,分页现在非常容易实现。它解决了友好的URL问题,因为我不想在URL中使用GUID。此外,Redis Cloud是可扩展的解决方案,非常可靠,并具有自动故障转移。
我不需要决定要拆分数据的范围,我只需对主键使用MD5哈希将数据平均分配到分片之间。对于HA,我决定使用Amazon RDS进行易于按时间点备份/还原和复制。
我认为Flickr使用相同的技术,但他们有两个生成器,一个用于奇数,另一个用于偶数。