美文网首页数据库123hjg
分库分表第一篇之基础概念

分库分表第一篇之基础概念

作者: 小螺丝钉cici | 来源:发表于2020-05-27 18:09 被阅读0次

    一.什么是 Sharding-jdbc
    二.Sharding-Proxy
    三.常用Client模式和 Proxy模式
    四.功能列表
    五.分库分表的基础概念
    六.Sharding-Sphere的发展史

    Sharding-Sphere

    Sharding- Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、 Sharding- Proxy和 Sharding- Sidecar(计划中)这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。

    一.Sharding-Jdbc

    Sharding-jdbc是一个开源的分布式数据库中间件,它无需额外部署和依赖,旧代码迁移成本几乎为零。
    Sharding-JDBC作为面向开发的微服务云原生基础类库,完整地实现了分库分表、读写分离和分布式主键功能,并初步实现柔性事务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容.JDBC和各种RM框架。

    (1)适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBCTemplate或直接使用Jdbc。
    (2)基于任何第三方的数据库连接池,如: DBCP C3PO, Bonecp Druio., Hikaricp等。
    (3)支持任意实现JDBC规范的数据库。目前支持 MySQL, Oracle, Sqlserver和Postgresql

    image.png
    二.Sharding- Proxy

    Sharding- Proxy定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。
    目前先提供 MySQL版本,它可以使用任何兼容MySQL协议的访问客户端(如: MySQL Command Client,MySQL Workbench等)操作数据,对DBA更加友好

    三.常用Client模式和 Proxy模式

    Client模式属于客户端直连方案。
    此方案的优势在于轻便、兼容性、性能以及对DA影响小
    Proxy模式属于中间层方案。
    在应用程序和MySQL之间搭建一层 Proxy。中间层介于应用程序与数据库间,需要做一次转发,而基于.JDBC协议并无额外转发,直接由应用程序连接数据库,性能上有些许优势。这里并非说明中间层一定不如客户端直连,除了性能,需要考虑的因素还有很多,中间层更便于实现监控、数据迁移、连接管理等功能。

    • Client模式:阿里的TDDL、当当网的 sharding-jdbc、
      Cobar-Client
    • Proxy模式:阿里的 cobar、民间组织的 MyCAT、 MYSQL- Proxy、 Amoeba for MYSQL、 Atlas360)、 Maxscale
    四.功能列表
    image.png

    五.分库分表

    5.1分库分表产生的背景
    image.png

    为什么需要分库分表:
    因为单一数据节点;性能瓶颈,不具备高可用性,运维成本高

    5.2数据分片
    • 垂直分片
      按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。
      在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。
      如下图:
      订单表放order订单库中
      用户表放user用户库中
    image.png
    • 水平分片
      又称为横向拆分。相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分。
      例如:根据主键分片,偶数主键的记录放入0库(或表),奇数主键的记录放入1库(或表)
    image.png

    比如:目前公司的很多表,按照tentendId % 3 求余,余数=1,分配到1库,余数=2分配到2库

    5.3 逻辑表 / 真实表 / 数据节点 / 绑定表
    • 逻辑表:对于水平拆分的数据库(表)的同一类表的总称。
      例:订单数据根据主键尾数拆分为10张表,分别是 t_order0到
      t_order9,他们的逻辑表名为 t_order。

    • 真实表 :在分片的数据库中真实存在的物理表。
      即上示例中的 t_order_0到t_order_9.

    • 数据节点
      数据分片的最小单元。
      由数据源名称和数据表组成,例:ds_0. t order_0。
      只有知道在哪个数据节点的数据库表才能进行sql处理。不然会报sql错误。

    • 绑定表
      指分片规则一致的主表和子表。
      例如: t_order表和 t_orderItem表,均按照订单ID分片,则此两张表互为绑定表关系。
      绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。

    六.Sharding-Sphere的发展史
    image.png
    4.0.0-RC1:新功能

    (1)支持XA强一致事务。
    (2)支持数据脱敏。
    (3)支持使用PostgreSQL协议访问Sharding-Proxy。
    (4)支持DISTINCT语句。
    (5)支持广播表。
    (6)路由至单一数据节点的SQL 100%全兼容(仅MySQL)。

    4.0.0-RC2: API调整和新功能
    • (1)删除 LogicIndex 配置 API,改为内部自动生成逻辑索引名称。
      (2)更新及增加脱敏模块 API,支持脱敏数据与原文数据共存。

    • (1)集成分布式事务 Seata。
      (2)用户可以使用 ShardingProxy 进行数据脱敏。
      (3)用户可以使用 Leaf-segment 生成器来获取分布式 ID。
      (4)支持使用 SkyWalking 插件进行应用程序性能管理。

    相关文章

      网友评论

        本文标题:分库分表第一篇之基础概念

        本文链接:https://www.haomeiwen.com/subject/shuwahtx.html