数据库分库分表
1.垂直拆分(拆分的是字段)
- 1.每个库(表)的结构都不一样
- 2.每个库(表)的数据(至少有一列一样)
- 3.每个库(表)的并集是全量数据
1.1垂直分库:
- 电商(shop)数据库可分为(orders订单库),(users)会员库,(goods商品库)。
1.2垂直分表:
- 原表:user表(userid,name,password,sex,adress,age,niack name)
- 分为如下两表:
- 分表1.user_base表(userid,name,password)
- 分表2.user_info表(userid,sex,adress,age,niack name)
1.3优点
- 1.拆分后业务清晰(专库专用按业务拆分)
- 2.数据维护简单,按业务不同业务放到不同机器上
1.4缺点
- 1.如果单表的数据库压力大,读写压力大
- 2.受某种业务决定,或者被限制,也就是说一个业务往往会影响到数据库的瓶颈(性能问题)
- 3.部分业务无法关联join,只能通过程序接口去调用,提高了开发复杂度,
2.水平拆分(拆分的是内容)
- 1.每个库(表)的结构都一样
- 2.每个库(表)的数据都不一样
- 3.每个库(表)的并集是全量数据
2.1 一种方法:id取模2,,如果userid mod 2等于1,去一表,等于0去二表
2.2优点
- 1.单库(表)的数据保持在一定量(减少),有助于性能提高
- 2.提高了系统的稳定性和负载能力
- 3.切分表的结构相同
2.3缺点
- 1.数据的扩容很有难度,维护量大
- 2.拆分规则很难抽象出来
- 3.分片事务的一致性问题,部分业务无法关联join,只能通过java程序接口去调用
3.分库分表问题
- 1.ACID分布式事务(分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。)
- 2.维护成本高
- 3.跨库查询问题
- 4.分布式全局唯一id
4.分库分表中间件
4.1proxy代理层
- mycat,atlas,mysql-proxy,shardingproxy
4.2jdbc应用层
shardingsphere(生态圈),TDDL,shardingjdbc
标签:分库,name,数据库,userid,拆分,分表 来源: https://blog.csdn.net/weixin_45417628/article/details/120585579
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。