精华内容
参与话题
问答
  • ShardingSphere

    2019-07-30 09:46:39
    ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库...

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

    ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它与NoSQL和NewSQL是并存而非互斥的关系。NoSQL和NewSQL作为新技术探索的前沿,放眼未来,拥抱变化,是非常值得推荐的。反之,也可以用另一种思路看待问题,放眼未来,关注不变的东西,进而抓住事物本质。 关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。

    no

    官网地址:https://shardingsphere.apache.org/index_zh.html

    与此类似的有mycat,有兴趣的同志可以了解一下。

     

    展开全文
  • shardingsphere

    2020-09-07 11:06:04
    文章目录pom.xmlapplication.ymlpojo pom.xml <!-- for spring boot -->...org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId>

    pom.xml

    		<!-- for spring boot -->
            <dependency>
                <groupId>org.apache.shardingsphere</groupId>
                <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                <version>RELEASE</version>
            </dependency>
    
    

    application.yml

    spring:
      shardingsphere:
        datasource:
          #数据源
          names: ds0,ds1
          #数据源属性
          ds0:
            type: com.zaxxer.hikari.HikariDataSource
            driver-class-name: com.mysql.jdbc.Driver
            jdbc-url: jdbc:mysql://localhost:3306/ds0?serverTimezone=UTC&characterEncoding=utf-8
            username: root
            password: root
          ds1:
            type: com.zaxxer.hikari.HikariDataSource
            driver-class-name: com.mysql.jdbc.Driver
            jdbc-url: jdbc:mysql://localhost:3306/ds1?serverTimezone=UTC&characterEncoding=utf-8
            username: root
            password: root
    
        sharding:
          #分库
          default-database-strategy:
            inline:
              #分片字段
              sharding-column: id
              #分片表达式
              algorithm-expression: ds$->{id % 2}
          #分表
          tables:
            #分表的表名
            tb:
              #数据节点,
              actual-data-nodes: ds$->{0..1}.tb$->{0..2}
              table-strategy:
                inline:
                  #分表字段
                  sharding-column: id
                  #分表表达式
                  algorithm-expression: tb$->{id % 3}
    

    pojo

    实体类要实现Comparable接口

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Table(name = "tb")
    public class Tb implements Comparable{
        @Id
        private Long id;
    
        @Override
        public int compareTo(Object o) {
            return id.intValue();
        }
    }
    
    展开全文
  • shardingsphere-ui/shardingsphere-ui-distribution/shardingsphere-ui-bin-distribution/target/apache-shardingsphere-${latest.release.version}-shardingsphere-ui-bin.tar.gz # Binary package of ...
  • ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈。 它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,shardingSphere定位为关系型数据库中间件。  ...
  • 它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,shardingSphere定位为关系型数据库中间件。 Sharding-JDBC Sharding-JDBC是Sharding-Sphere的第一个产品,也是...
  • 它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,shardingSphere定位为关系型数据库中间件。  Sharding-JDBC Sharding-JDBC是Sharding-Sphere的第一个产品,...
  • ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表 课程目标 快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介 ...
  • ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈。 它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,shardingSphere定位为关系型数据库中间件。  ...
  • 背景 传统的将数据集中存储至单一数据节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足互联网的海量数据场景。 从性能方面来说,由于关系型数据库大多采用B+树类型的索引,在数据量超过阈值的情况下...

    背景

    传统的将数据集中存储至单一数据节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足互联网的海量数据场景。

    从性能方面来说,由于关系型数据库大多采用B+树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得磁盘访问的IO次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中式数据库成为系统的最大瓶颈。

    从可用性的方面来讲,服务化的无状态型,能够达到较小成本的随意扩容,这必然导致系统的最终压力都落在数据库之上。而单一的数据节点,或者简单的主从架构,已经越来越难以承担。数据库的可用性,已成为整个系统的关键。

    从运维成本方面考虑,当一个数据库实例中的数据达到阈值以上,对于DBA的运维压力就会增大。数据备份和恢复的时间成本都将随着数据量的大小而愈发不可控。一般来讲,单一数据库实例的数据的阈值在1TB之内,是比较合理的范围。

    在传统的关系型数据库无法满足互联网场景需要的情况下,将数据存储至原生支持分布式的NoSQL的尝试越来越多。 但NoSQL对SQL的不兼容性以及生态圈的不完善,使得它们在与关系型数据库的博弈中始终无法完成致命一击,而关系型数据库的地位却依然不可撼动。

    数据分片指按照某个维度将存放在单一数据库中的数据分散地存放至多个数据库或表中以达到提升性能瓶颈以及可用性的效果。 数据分片的有效手段是对关系型数据库进行分库和分表。分库和分表均可以有效的避免由数据量超过可承受阈值而产生的查询瓶颈。 除此之外,分库还能够用于有效的分散对数据库单点的访问量;分表虽然无法缓解数据库压力,但却能够提供尽量将分布式事务转化为本地事务的可能,一旦涉及到跨库的更新操作,分布式事务往往会使问题变得复杂。 使用多主多从的分片方式,可以有效的避免数据单点,从而提升数据架构的可用性。

    通过分库和分表进行数据的拆分来使得各个表的数据量保持在阈值以下,以及对流量进行疏导应对高访问量,是应对高并发和海量数据系统的有效手段。 数据分片的拆分方式又分为垂直分片和水平分片。

    垂直分片

    按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。 在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。 下图展示了根据业务需要,将用户表和订单表垂直分片到不同的数据库的方案。

    垂直分片

    垂直分片往往需要对架构和设计进行调整。通常来讲,是来不及应对互联网业务需求快速变化的;而且,它也并无法真正的解决单点瓶颈。 垂直拆分可以缓解数据量和访问量带来的问题,但无法根治。如果垂直拆分之后,表中的数据量依然超过单节点所能承载的阈值,则需要水平分片来进一步处理。

    水平分片

    水平分片又称为横向拆分。 相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分。 例如:根据主键分片,偶数主键的记录放入0库(或表),奇数主键的记录放入1库(或表),如下图所示。

    水平分片

    水平分片从理论上突破了单机数据量处理的瓶颈,并且扩展相对自由,是分库分表的标准解决方案。

    挑战

    虽然数据分片解决了性能、可用性以及单点备份恢复等问题,但分布式的架构在获得了收益的同时,也引入了新的问题。

    面对如此散乱的分库分表之后的数据,应用开发工程师和数据库管理员对数据库的操作变得异常繁重就是其中的重要挑战之一。他们需要知道数据需要从哪个具体的数据库的分表中获取。

    另一个挑战则是,能够正确的运行在单节点数据库中的SQL,在分片之后的数据库中并不一定能够正确运行。例如,分表导致表名称的修改,或者分页、排序、聚合分组等操作的不正确处理。

    跨库事务也是分布式的数据库集群要面对的棘手事情。 合理采用分表,可以在降低单表数据量的情况下,尽量使用本地事务,善于使用同库不同表可有效避免分布式事务带来的麻烦。 在不能避免跨库事务的场景,有些业务仍然需要保持事务的一致性。 而基于XA的分布式事务由于在并发度高的场景中性能无法满足需要,并未被互联网巨头大规模使用,他们大多采用最终一致性的柔性事务代替强一致事务。

    目标

    尽量透明化分库分表所带来的影响,让使用方尽量像使用一个数据库一样使用水平分片之后的数据库集群,是ShardingSphere数据分片模块的主要设计目标。

    转载自:ShardingSphere > 概念 & 功能 > 数据分片

    展开全文
  • ShardingSphere

    千次阅读 2019-08-27 15:01:58
    子查询不支持聚合函数,不支持含shema的SQL:shardingsphere对sql的访问都是在同一个逻辑schema上 分页 完全支持MySQL、PostgreSQL和Oracle的分页查询,SQLServer由于分页查询较为复杂,仅部分支持 性能 编...

    使用规范

    不支持:不支持case when,having,union 

    可解析至第一个含表的子查询,在下层嵌套再次找到子查询抛错

    子查询不支持聚合函数,不支持含shema的SQL:shardingsphere对sql的访问都是在同一个逻辑schema上

    分页

    完全支持MySQL、PostgreSQL和Oracle的分页查询,SQLServer由于分页查询较为复杂,仅部分支持

    性能

    编译量过大的分页导致获取数据性能下降

    优化

    • 流式处理+归并排序:sql改写占用额外带宽不会导致内存暴涨,结果集有序,shardingsphere每次比较仅获取各分片当前结果集记录,在内存中的记录仅为当前路由到的分片结果集的当前游标指向,对于本身有序的待排序对象,归并排序时间复杂度O(n)
    • shardingsphere对 仅落至单分片的查询 进一步优化,落至单分片查询的请求不需要改成sql也可保证记录正确性:未改写sql

    优化实例

    LIMIT不能通过索引查询数据,通过连续性ID分页,或上次查询结果最后一条

    SELECT * FROM t_order WHERE id > 100000 AND id <= 100010 ORDER BY id
    SELECT * FROM t_order WHERE id > 100000 LIMIT 10

    分页子查询

    oracle,使用rownum分页

    SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT o.order_id as order_id FROM t_order o JOIN t_order_item i ON o.order_id = i.order_id) row_ WHERE rownum <= ?) WHERE rownum > ?

    sqlserver,TOP + ROW_NUMBER() OVER

    SELECT * FROM (SELECT TOP (?) ROW_NUMBER() OVER (ORDER BY o.order_id DESC) AS rownum, * FROM t_order o) AS temp WHERE temp.rownum > ? ORDER BY temp.order_id
    
    SQL service 2012后的offset fetch
    SELECT * FROM t_order o ORDER BY id OFFSET ? ROW FETCH NEXT ? ROWS ONLY
    https://www.yiibai.com/sqlserver/sql-server-offset-fetch.html
    

    不支持Wtih *** as (select ……)分页:hibernate自动分页语句使用了,所以不支持基于hibernate的sqlservice 分页

    不支持两个top+子查询的分页方式

    其他功能

    行表达式

    实现动机:配置简化和一体化

    语法:Groovy

    配置中使用${expression}或$—>{expression}标识

    目前支持数据节点和分片算法的配置

    多个${expression} $—>{expression},结果据每个子表达式结果笛卡尔组合

    分布式主键

    snowflake

    分片规则配置每个表主键生成策略,默认使用雪花算法生成64bit长整型数据

    不同进程主键不重复,同一进程主键有序

            同进程中,通过时间位:不重复,时间同序通列位保证不重复

            主键:1bit符号位,41bit时间戳位,10bit工作进程位,12bit序列号位

    符号位:预留符号位恒为0

    时间戳位:毫秒数:2的41次幂,一年所使用毫秒数 365*24*60*60*1000约等于69.73年,始于2016/11/1/00:00:00

    工作进程:java进程内唯一,分布式应用部署应保证每个进程id不同,该值默认为0可设置属性

    序列号位:同一毫秒内生成不同ID,如该毫秒生超过4096(2的12次幂),生成器等待下一毫秒

    时钟回拨

    将导致重复序列,默认分布式主键生成器提供了一个最大容忍的时钟回拨毫秒数:默认0,设置属性

            超过,报错

            范围内,默认会等待时钟同步到最后一次主键生成的时间后再继续工作

    leaf

    leaf_segment和leaf_snowflake两种方案,目前shardingsphere已实现leaf_segment

    强制分片路由

    解析sql提取分片键列与值 进行分片,若无分片条件 无法分片 需全路由

    使用threadlocal管理分片键值,通编程方式向hintmanager添加分片条件,仅当前线程有效

    还计划通过sql中特殊注释引用hint,开发者透明方式使用该功能

    指定强制分片路由sql无视原有分片逻辑,直接路由至指定真实数据节点

    读写分离

    据sql语义分析,读写路由至主从库

    概念

    主库:增删改操作使用的库,仅支持单主库

    从库:查数据操作所使用的库,多从库

    主从同步:主库数据异步的同步到从库,由于主从同步的异步性,主从数据短时间内不一致

    功能

    一主多从读写分离配置,可独立使用,可配合分库分表使用

    独立使用读写分离支持sql透传

    基于hint强制主库路由

    同一线程且同一库连接内,如有写入,以后读均从主库取

    不支持

    主从数据同步,主从同步延迟导致数据不一致,主库双写或多写

    编排治理

    配置中心

    配置中心在定义的命名空间的config下,以yaml格式存:数据源 数据分片 读写分离 properties配置

    数据结构

    config
        ├──authentication                            # Sharding-Proxy权限配置
        ├──props                                     # 属性配置
        ├──schema                                    # Schema配置
        ├      ├──sharding_db                        # SchemaName配置
        ├      ├      ├──datasource                  # 数据源配置
        ├      ├      ├──rule                        # 数据分片规则配置
        ├      ├──masterslave_db                     # SchemaName配置
        ├      ├      ├──datasource                  # 数据源配置
        ├      ├      ├──rule                        # 读写分离规则

    https://shardingsphere.apache.org/document/current/cn/features/orchestration/config-center/  !!!

    编排治理

    通注册中心,提供熔断数据库访问程序对数据库访问和禁用从库访问

    注册中心数据结构

    在命名空间的state下,创建数据库访问对象运行节点,区分不同数据库访问实例:instances 和 datasources

    state/instances:数据库访问对象运行实例信息,子节点:当前运行实例标识

            标识由 服务器IP和PID构成,临时节点 实例上线时注册下线时清理

             注册中心监控节点变化治理运行中实例对数据库的访问

    state/datasources:治理读写分离从库,动态添加 删除 禁用

    操作指南

    熔断实例

    在IP@-@PID节点写入disabled(忽略大小写):禁用该实例 删除disabled:启用

    禁用从库

    读写分离(数据分片+读写分离)可在数据源名称子节点中写入disabled:禁用从库数据源,删除disabled或节点:启用

     

    注册中心

    SPI:service provider interface 为被第三方实现或扩展的api:实现框架扩展或组件替换

    zookeeper:

    官方使用apache curator(zk的java/jvm客户端)做为zk实现方案

    Etcd

    官方使用原生etcd做为etcd实现方案

    应用性能监控

    APM:着眼于分布式系统性能诊断,调用链展示,应用拓扑分析

    shardingsphere将sql解析与执行的数据分片最核心的相关信息发送至应用性能监控系统

     

     

     

    展开全文
  • shardingsphere 使用

    2019-07-24 17:09:48
    http://shardingsphere.apache.org/index_zh.html 2.demo-java 版本: // 配置第一个数据源 BasicDataSource dataSource1 = new BasicDataSource(); dataSource1.setDriverClassName("com....
  • ShardingSphere 事务

    2020-08-16 20:36:01
    ShardingSphere 注意事项 1:数据修改不可修改分区键 2:在配置关联表的关联关系是数组不是字符串。 ShardingSphere 事务 本地事务 完全支持非跨库事务,例如:仅分表,或分库但是路由的结果在单库中。 完全支持因...
  • shardingsphere分析

    2019-07-04 10:51:00
    鉴于最近shardingSphere非常火爆,分析分析下其中的实现 2、常见的sharding的策略 实现层面 应用框架 优劣分析 数据访问层(DAO层) 适合在该层进行自主研发 不受ORM框架的制约、实现起来较为简单...
  • shardingsphere官网

    2019-09-26 21:49:14
    https://shardingsphere.incubator.apache.org/ 转载于:https://www.cnblogs.com/shianliang/p/10813940.html

空空如也

1 2 3 4 5 ... 20
收藏数 1,864
精华内容 745
关键字:

shardingsphere