一.水平切分
水平切分又称为 Sharding 策略,它是将同一个表中的记录拆分到多个结构相同的表中。
当一个表的数据不断增多时,Sharding 是必然的选择,它可以将数据分布到集群的不同节点上,从而缓存单个数据库的压力。
Sharding 策略
- 哈希取模: hash(key) % NUM_DB
- 范围: 可以是 ID 范围也可以是时间范围
- 映射表: 使用单独的一个数据库来存储映射关系
Sharding 存在的问题及解决方案
1.事务问题
使用分布式事务来解决,比如 XA 接口。
2. 链接
可以将原来的 JOIN 分解成多个单表查询,然后在用户程序中进行 JOIN。
3.ID 唯一性
- 使用全局唯一 ID: GUID
- 为每个分片指定一个 ID 范围
- 分布式 ID 生成器 (如 Twitter 的 Snowflake 算法)
二.垂直切分
垂直切分是将一张表按列切分成多个表,通常是按照列的关系密集程度进行切分,也可以利用垂直切分将经常被使用的列和不经常被使用的列切分到不同的表中。
在数据库的层面使用垂直切分将按数据库中表的密集程度部署到不同的库中,例如将原来的电商数据库垂直切分成商品数据库、用户数据库等。
我的工作还没接触到这个,等后面再去深入研究....
更多内容请参考:文章来源:https://www.toymoban.com/news/detail-564480.html
- How Sharding Works在新窗口打开
- 大众点评订单系统分库分表实践
分库分表完如何生成唯一ID
分库分表时唯一ID如何生成 - 知乎 (zhihu.com)文章来源地址https://www.toymoban.com/news/detail-564480.html
到了这里,关于Mysql的分库分表策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!