ICode9

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

分库分表的简单使用

2021-06-07 14:29:22  阅读:137  来源: 互联网

标签:分库 SQL 数据库 简单 支持 JDBC 分片 分表


分库分表
1.两种方式:
(1)Sharding-Jdbc:
(2)MyCat:
区别:
Sharding-jdbc:
优点:
1.可适用于任何基于java的ORM框架,如:JPA、Hibernate、Mybatis、Spring JDBC Template,或直接使用JDBC
2.可基于任何第三方的数据库连接池,如:DBCP、C3P0、Durid等
3.分片策略灵活,可支持等号、between、in等多维度分片,也可支持多分片键。
4.SQL解析功能完善,支持聚合、分组、排序、limit、or等查询,并支持Binding Table以及笛卡尔积表查询。
5.性能高,单库查询QPS为原生JDBC的99.8%,双库查询QPS比单库增加94%。
缺点:
1.理论上可支持任意实现JDBC规范的数据库。目前仅支持mysql
2.维护会比较麻烦,需要逐个项目的修改配置。不能进行跨库连接,代码需要进行改造。
3.在扩展数据库服务器时需要考虑一致性哈希问题,或者采用分片键局部取模方式,也难免要进行部分的数据迁移。
MyCat:
优点:
1.支持Mysql集群,可以作为Proxy使用
2.支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用
3.自动故障切换,高可用性
4.支持读写分离,支持Mysql双主多从,以及一主多从的模式 ,支持全局表,数据自动分片到多个节点,用于高效表关联查询
5.支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询
6.多平台支持,部署和实施简单
缺点:
1.mycat不支持二维路由,仅支持单库多表或多库单表 由于自定义连接池,这样就会存在mycat自身维护一个连接池,MySQL也有一个连接池,任何一个连接池上限都会成为性能的瓶。
1.2 MyCat的工作原理:
Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
1.3 MyCat的读写分离:

2.sharding-jdbc是什么:
1.开源的分布式数据库中间件,它无需额外部署和依赖,旧代码迁移成本几乎为零。
2.面向开发的微服务与云原生的基础类库。
3.完整的实现了分库分表,读写分离和分布式主键功能
3. sharding-jdbc拆分规则:
(1) 垂直拆分:按着业务去拆分
订单表,用户表在一个数据库,数据量非常大,对数据库的压力非常大,分别分到订单库,和用户库中,分担压力,其实如果用户一直在快速增长,订单无限的情况下,还是解决不了这个问题的。
(2)水平拆分:按着算法规则去拆分
hash规则:根据用户表的id的hash值进行取模,id=1的进入第一个库,id=2的进入第二个库,以此类推
范围规则:按着1,1001,2001,这样的范围去拆解开放入不同的库中
标签分片:针对地区字段,北京在一块,上海在一块,中国在一块,美国在一块。
时间分片:交易记录,按着每年分片,或者是每月分片
复合分库:
4. 几个概念
逻辑表:对于水平拆分的数据库(表)的同一类表的总称:t_high_bill,
真实表:在分片的数据库中真实存在的物理表,t_high_bill_1
数据节点:数据库名称+数据表名称组成。是数据分片的最小单元。
绑定表:分片规则一致的主表和子表,例如:t_order表和t_order_item表,都按着订单id进行分片,两张表互为绑定表关系。查询效率大大提升。
5. 项目中的使用情况
将账单表根据车牌号分为八个完全一样的表,在xml文件中操作时的逻辑表名称为t_high_bill,真实表名称为:t_high_bill_1,八个表分别加_1.
DatabaseShardingStrategy设置为2偶数,不进行分库操作。
可以结合springboot和Sharding-JDBC实现读写分离功能。(一主多从)

标签:分库,SQL,数据库,简单,支持,JDBC,分片,分表
来源: https://blog.csdn.net/baby901019/article/details/117660487

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

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

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

ICode9版权所有