ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

分库分表带来的问题

2021-12-16 09:32:26  阅读:182  来源: 互联网

标签:分库 join 数据库 带来 分表 id 分布式


1 跨库关联查询

在单库未拆分表之前,我们可以很方便使用 join 操作关联多张表查询数据,

但是经过分库分表后两张表可能都不在一个数据库中,

如何使用 join 呢? 有几种方案可以解决:

字段冗余:把需要关联的字段放入主表中,避免 join 操作; 

数据抽象:通过ETL等将数据汇合聚集,生成新的表;

全局表:比如一些基础表可以在每个数据库中都放一份; 

应用层组装:将基础数据查出来,通过应用程序计算组装;

2 分布式事务

单数据库可以用本地事务搞定,使用多数据库就只能通过分布式事务解决了。
常用解决方案有:=基于可靠消息(MQ)的解决方案、两阶段事务提交、柔性事务等。=

3 排序、分页、函数计算问题

在使用 SQL 时 order by, limit 等关键字需要特殊处理,一般来说采用分片的思路:
先在每个分片上执行相应的函数,然后将各个分片的结果集进行汇总和再次计算,最终得到结果。

4 分布式id

如果使用 Mysql 数据库在单库单表可以使用 id 自增作为主键,分库分表了之后就不行了,会出现id 重复。
常用的分布式 ID 解决方案有:
UUID 基于数据库自增单独维护一张 ID表 号段模式
Redis 缓存 雪花算法(Snowflake) 百度uid-generator
美团Leaf
滴滴Tinyid

5 多数据源

分库分表之后可能会面临从多个数据库或多个子表中获取数据,一般的解决思路有:客户端适配和代理层适配。
业界常用的中间件有:

shardingsphere(前身 sharding-jdbc)
Mycat

标签:分库,join,数据库,带来,分表,id,分布式
来源: https://www.cnblogs.com/hellosiyu/p/15696394.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有