mysql写数据根据某种hash分布存储到不同机器上,怎么样实现机器增加以后,根据hash定位的规则一致?

2013-11-10 08:55:42 +08:00
 yakczh
举个例子,比如生成一个编号的空间1-10 现在两台机器,小于5的编号存到A机器上,大于5的存到B机器上, 这样查询的时候根据id就可以知道存在哪台机器上,如果后来增加一台机器,按编号1-3,3-6,6-10这样平均切分,就可以将流量继续分摊,但是这样对于原来的对应关系就乱了,比如编号8 ,最早是存在B机器上,但是现在可以存在C机器上,不能一步就定位,有什么好的办法,在增加机器以上,保证原来的定位规则不变吗?
2835 次点击
所在节点    MySQL
5 条回复
rrfeng
2013-11-10 09:52:13 +08:00
HASH 的时候加入一个 server id ,比如 ip/hostname
wy315700
2013-11-10 10:06:44 +08:00
一致性哈希
polythene
2013-11-10 13:19:39 +08:00
Livid
2013-11-10 13:31:17 +08:00
用机器 IP 作为 hash 算法的输入

id = hash(server.ip)
yakczh
2013-11-10 21:59:04 +08:00
这种是不是意味着key的最大空间是2^32?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/88691

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX