Sharding-Sphere(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wumei12345/article/details/88226453

一、分库分表

 随着业务越来越大,单表数据超出了数据库支撑的容量,达到了数据库的瓶颈。这时可以采用分库分表。

       处理数据库瓶颈问题的方法有以下几种方式:

       1.换数据库(缓存)

       2.Sql、索引、字段优化

       3.读写分离(业务有关优化)

       4.分库分表(业务)

       5.分区

二、分库分表方式

垂直:通俗的说法叫做“大表拆小表”,拆分是基于关系型数据库中的“列”(字段)进行的。(字段拆分)

                                         

           特点:1、每个库(表)的结构都不一样

                      2、每个库(表)的数据至少有一列一样

                      3、每个库(表)的并集是全量数据

           缺点:1、如果在原有的项目上进行分库分表,那么工作量比较大

                      2、垂直分库分表如果单个表的数据量比较大会出现读写压力大

                     3、如果进行了分库,那么库与库之间的关联就比较麻烦,不能通过sql直接实现

水平:以某个字段按照一定的规律(取模)将一个表的数据分到多个库中(内容拆分)

                                             

               特点:1、每个库(表)的结构都一样

                          2、每个库(表)的数据都不一样

                          3、每个库(表)的并集是全量数据

               缺点:1、数据库扩容难度很大,如原来有3个数据库取模,如果要增加就要改代码(on)

                          2、拆分规则很难抽象出来,不同的表可能根据不同的字段进行取模

                          3、分片事物的一致性问题部分事物无法关联join,只能通过java程序去调用

一般我们常用垂直分库、水平分表 

三、分库分表的常见算法

            取模(Hash):用某个字段对数据库个数取模

            范围区分(range):根据时间划分

            预定义(list):提前预估定点量,每个数据库平均分多少数据

四、读写分离

    读写分离主要应用在读多写少的项目,要有主从库同步,但是会有主从延迟现象数据不一致,这就要根据具体业务想办法避免。

对于特殊的场景可以设置直接查询主库,可以使用sharding-sphere的强制路由(sql-hint)来解决。例如:在下单时订单信息insert到主库,在支付的时候查重库的时候可能数据还没有同步过来,这时候我们就可以把这种场景直接设置强制查询主库。

五、常用中间件

     开源中间件:sharding-sphere、atlas

     Sharding-Sphere 主要是辅助分库分表的工具

     Proxy代理:mycat(重)、mysql-proxy atlas、sharding-proxy(sharding-sphere )

    Jdbc直连:TDDL(淘宝 半开源) 、sharding-jdbc(sharding-sphere )

     

猜你喜欢

转载自blog.csdn.net/wumei12345/article/details/88226453