首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分割Mysql数据库的最佳方法

分割Mysql数据库的最佳方法
EN

Stack Overflow用户
提问于 2019-05-08 13:25:53
回答 1查看 1.5K关注 0票数 3

我有大量的用户,所以我需要将数据库分割成n个碎片。为了继续这件事,我有以下选择-

  1. 将我的数据除以n个切分基userId模n运算。也就是说,如果我有10个碎片,userId 1999将被发送到1999%10=9th碎片 问题-这种方法的问题是,如果碎片的数量在将来增加到以前的引用将不会被保持。
  2. 我可以用UserId和ShardId维护一个表 问题--如果我的用户将来增加到数十亿,我需要共享这个映射表,这似乎不是一个好的解决方案。
  3. 我可以在代码中维护静态映射,比如Shard 1中的0-10000以及更多。 问题-
代码语言:javascript
复制
- With the increase in shards and Users Code needed to be changed more often.
- If any specific User in shard has huge data It'd get difficult to separate out the shard.

所以,这是我能找到的三种方法,但都有一些问题。将MySQL表分割成碎片的替代或更好的方法是什么,这可以弥补将来碎片和用户数量的增加。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-10 04:37:01

我更喜欢1和2的混合:

  1. 将UserId哈希为4096个值。
  2. 在“字典”中查找这个数字,字典中有切碎的数字。

如果碎片太满,则将所有具有某些散列号的用户迁移到另一个碎片。

如果您添加了一个碎片,将一些散列号迁移到它上--最好是从繁忙的碎片中迁移。

这迫使您为移动用户编写脚本,并使其健壮。一旦你有了它,很多其他的管理任务就变得“简单”了:

  • 使机器退役
  • 升级操作系统(一个接一个地跨碎片)
  • 升级机器上的任何软件
  • 将庞大但不繁忙的散列数迁移到具有大磁盘的旧的、缓慢的碎片上。类似地,迁移到一个拥有更多内核和更快磁盘的碎片上也很小,而且很忙。

每个碎片都可以是服务器的HA集群(Galera、组复制等),以提高可靠性和读取规模。(分片给你写缩放。

需要有一种“迅速”将词典分发给所有客户的方法。

如果您在HA的三个不同的碎片中包含了每个散列,那么所有这些都能很好地工作。三人中的每一人都将在地理位置上保持稳健。词典将有4列,以说明副本在哪里。第四种将在迁徙期间使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56041915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档