分库分表解决方案和数据库分片中常见的问题及其解决方案

举报
简简单单Onlinezuozuo 发表于 2022/03/28 22:18:23 2022/03/28
【摘要】 文章目录 分库分表解决方案和数据库分片中常见的问题及其解决方案1、分库分表形式2、分库分表解决方案3、分库分表中存在的问题4、总结 分库分表解决方案和数据库分片中常见的问题...

分库分表解决方案和数据库分片中常见的问题及其解决方案


1、分库分表形式


水平分库
建立结构一样的库,根据分库方案划分数据到不同库

水平分表
建立多个表,根据分表方案划分数据到不同表

垂直分库
根据业务模块,把一组表划分为一个库

垂直分表
根据字段的活跃性,把字段组拆分到不同的表中

2、分库分表解决方案


分库分表工具(轻量级)
1、sharding-sphere :jar 包,前身是 sharding-jdbc (当当)
2、TSharding : 蘑菇街的中间件

分库分表工具(重量级)
1、Mycat : 中间件产品,基于开源的 cobar 开发
2、TDDL Smart Client : jar 包,Taobao Distribute Data Layer
3、Atlas : 奇虎 360
4、alibaba.cobar : 阿里 B2B 部门开发
5、Oceanus : 58 同城的数据库中间件
6、OneProxy : 支付宝首席架构师楼方鑫开发
7、vitess : 谷歌开发的数据库中间件

分表规则
1、Hash
2、Range

3、分库分表中存在的问题


1、事务问题
    方案一:使用分布式事务
        优点:交由数据库管理,简单有效
        缺点:性能代价高,特别是shard越来越多时
    方案二:由应用程序和数据库共同控制
        原理:将一个跨多个数据库的分布式事务分拆成多个仅处 于单个数据库上面的小事务,并通过应用程序来总控 各个小事务。
        优点:性能上有优势
        缺点:需要应用程序在事务控制上做灵活设计。如果使用 了spring的事务管理,改动起来会面临一定的困难。

2、跨节点的 Join 问题
    只要是进行切分,跨节点 Join 的问题是不可避免的。但是良好的设计和切分却可以减少此类情况的发生。解决这一问题的普遍做法是分两次查询实现。
    在第一次查询的结果集中找出关联数据的id,根据这些id发起第二次请求得到关联数据。

3、跨节点聚合问题
    比如 count、order by、group by 等聚合函数问题,方案是各节点完成计算后,交由业务层进行合并
    多节点的查询可以是并行的,因此大多数情况他比单一大表快很多,但是如果结果集很大,可能会导致内存消耗过高

4、数据迁移,容量规划,扩容等问题
    这些问题目前都没有特别好的解决方案,每个方案都或多或少的有一些问题存在,因此这个问题的解决难度其实挺高的

5、ID 问题
    数据被切分后,就不能依赖数据库的自增 ID 进行赋值,另外 ID 还需要承担携带路由信息的功能,以降低查询难度
    一种方案是使用 UUID ,但是 UUID 比较长会占用较多的存储空间,另外一方面,UUID 对索引不友好
    一种方案是通过维护一个 ID 签发表来对 ID 进行签发,但是这会导致插入需要增加一次查询,且该表容易成为性能瓶颈存在单点故障问题
    一种方案是使用雪花算法进行 ID 的下发

6、跨分片的排序问题
    如果排序字段是分片字段,则可以直接使用分片排序
    如果排序字段不是分片字段,则需要先在分片上进行排序,然后到业务系统进行合并,然后再排序

7、分库策略、分库数量
    这个需要根据实际的业务场景,进行合理的分配,否则容易给后期造成很大的问题




  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

4、总结


1、分库分表,首先要知道数据库的瓶颈在哪里,才能给出合理的方案
2、对于 Key 的选择很重要,要考虑数据拆分均匀,也要考虑非 partition key 的查询
3、满足要求的情况下,划分规则越简单越好

文章来源: wretchant.blog.csdn.net,作者:简简单单OnlineZuozuo,版权归原作者所有,如需转载,请联系作者。

原文链接:wretchant.blog.csdn.net/article/details/123783206

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。