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

本文涉及的产品
函数计算FC,每月15万CU 3个月
容器镜像服务 ACR,镜像仓库100个 不限时长
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 分库分表解决方案和数据库分片中常见的问题及其解决方案

@[toc]

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


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

4、总结


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

相关文章
|
2月前
|
运维 监控 关系型数据库
AI 时代的 MySQL 数据库运维解决方案
本文探讨了大模型与MySQL数据库运维结合所带来的变革,介绍了构建结构化运维知识库、选择合适的大模型、设计Prompt调用策略、开发MCP Server以及建立监控优化闭环等关键步骤。通过将自然语言处理能力与数据库运维相结合,实现了故障智能诊断、SQL自动优化等功能,显著提升了MySQL运维效率和准确性。
344 18
|
4月前
|
Cloud Native 关系型数据库 分布式数据库
阿里云PolarDB与沃趣科技携手打造一体化数据库解决方案,助推国产数据库生态发展
阿里云瑶池数据库与沃趣科技将继续深化合作,共同推动国产数据库技术的持续创新与广泛应用,为行业生态的繁荣注入更强劲的技术动力。
阿里云PolarDB与沃趣科技携手打造一体化数据库解决方案,助推国产数据库生态发展
|
3月前
|
运维 监控 关系型数据库
AI 时代的 MySQL 数据库运维解决方案
本方案将大模型与MySQL运维深度融合,构建智能诊断、SQL优化与知识更新的自动化系统。通过知识库建设、大模型调用策略、MCP Server开发及监控闭环设计,全面提升数据库运维效率与准确性,实现从人工经验到智能决策的跃迁。
453 26
|
2月前
|
SQL 安全 关系型数据库
数据库安全管理新范式:DBKEEPER一体化数据库权限管控堡垒机解决方案
在数字化时代,数据库安全至关重要。DBKEEPER提供一站式数据库安全访问与权限管控解决方案,支持多种数据库,具备精细化权限管理、数据脱敏、高危操作拦截、全面审计等功能,助力企业实现智能、安全的数据治理,满足金融、医疗、互联网等行业合规需求。选择DBKEEPER,让数据库安全管理更高效!
数据库安全管理新范式:DBKEEPER一体化数据库权限管控堡垒机解决方案
|
6月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
1013 82
|
5月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
8月前
|
安全 网络安全 数据库
Access denied for user ‘qingtingstpublic’@’171.213.253.88’ (using password: YES)宝塔数据库远程无法连接-宝塔数据远程无法连接的正确解决方案-优雅草央千澈-问题解决
Access denied for user ‘qingtingstpublic’@’171.213.253.88’ (using password: YES)宝塔数据库远程无法连接-宝塔数据远程无法连接的正确解决方案-优雅草央千澈-问题解决
106 28
|
9月前
|
存储 数据管理 关系型数据库
数据库分库分表的原因?
分库分表通过减少单库单表负担来提升查询性能。垂直切分按业务耦合度将表或列分布于不同库或表中,减少数据量,优化性能。水平切分则按数据逻辑关系将表分散至多库多表,减小单表数据量,实现分布式处理。选择方式需根据具体需求决定。
167 19
|
10月前
|
运维 监控 关系型数据库
数据库管理中的自动化运维:挑战与解决方案
数据库管理中的自动化运维:挑战与解决方案