使用对ID取模的方法做数据库的水平拆分,如果需要增加一个数据库,需要怎么处理?

面试题分类: Database使用对ID取模的方法做数据库的水平拆分,如果需要增加一个数据库,需要怎么处理?
lzk asked 1年 ago

比如原来有5个数据库,那么可以按照ID对5取模,把一个表里的数据拆分到5个表里,现在要增加1个数据库,那么需要怎么修改代码呢?有没有不做数据迁移的方法?


FavoriteLoading添加本文到我的收藏
1 Answers
wlqswp 管理员 answered 1年 ago

有点困难, 可以用一致性hash算法,这样增加数据库的时候可以保证只有一台数据库的数据需要迁移到新的机器。  如果非要不迁移的话,那么我觉得可以这么做,你当前是5台机器,那么HASH最后是要%5的(如果不用一致性HASH算法的话),你的ID需要带有%5的信息,例如 xxxxxyyyyyyzzzzz-m5, 如果你加了一个机器,那么从此以后生成的ID是xxxxxyyyyyyzzzzz-m6. 所有m5结尾的ID,你HASH方法最后用%5, m6结尾的用%6, 以此类推, 当时这样可以ID分配就不均衡了。 


FavoriteLoading添加本文到我的收藏

return top