DRDS学习笔记

1、DRDS是什么

        它是一个分布式数据库系统,是一个服务端,从开发的角度,可以把它看成一个数据库的代理/中间件,他是业务与mysql之间的桥梁。

        可以用MySQL客户端(Nacivat等)连、MySQL语句访问。

        核心功能是分库分表,就是把一个大表水平拆分成N个表,分完存在MySQL服务器里,或者,存在其他数据库里。比如一个稿件或者订单大表,拆成了128个表,放在128个库里,那么用drds就把128个库连接一把管理了,叫,收敛连接。此外,还能帮助mysql读写分离,这个我没用到。

        drds支持的策略很多,可以只分表不分库、只分库不分表、既分库又分表。一般第一种使用意义不大,多是后面两种。并且分库和分表的拆分算法可以不一样。拆分算法支持RANGE、HASH、LIST、UNI_HASH、RANGE_HASH。分库和分表同时拆分就是一种复合分区的用法。比如,把拆分键hash取模,然后%256,即对256取余数

        SQL在中间件层经过处理,然后才到MYSQL后端

 

2、配置项里的概念

(schema.xml 我在项目里没有找到?)

<dataNode name="dn1" dataHost="localhost1" database="db1"/>

【分片节点】

        数据切分后,一个大表被分到不同的分片数据库上,每个表分片所在的数据库,叫分片节点,dataNode

【节点主机】

        一个机器上,可以有多个dataNode,那么有1-N个分片节点的机器,叫节点主机,dataHost。单节点会有并发数限制(不知为何?),所以一般把读写压力高的分片节点均衡的放在不同的节点主机上。

【分片规则】

        大表分开的方式,就是分片规则

【逻辑库】

        从数据库的角度,对外保持逻辑的一致性。        

        对于应用的角度,不需要区分我连的数据库下面是怎么一回事,一般就知道这是个能用数据库就行了,所以drds这种数据库中间件,就可以看成一个逻辑库,由1-n个数据库集群构成。

        比如,这是一个订单库,ok了,这是逻辑库;具体是订单库0、还是订单库55,应用不感知

        那么这样一个服务,可以卖给多个应用,就是说多租户形式。每个应用访问的实际物理库,可以是独立的,也可以是共享的。比如阿里云的RDS

【逻辑表】

        参考逻辑库

【分片表】

        大表被切成了一片一片后,形成的小表,就是分片表。所有分片构成了完整的数据

【拆分键】

        分库/分表按拆分键来分,所以有分库键、分表键。我只用过按单个字段拆的。拆分键的键值相同的数据,一定会位于同一个库/表。比如,用户订单的订单ID

3、使用的注意事项

1.where查询时,如果没带拆分键、或者带了但是范围很广,就会触发全表扫描(SQl语句被分发到所有分库上执行),然后再在DRDS中合并执行结果,所以很慢,尽量避免这样用

2.limit offset、count语句,实际会把offset之前的记录读取后、丢弃,只保留offset之后的数据。这样当offset非常大、但是limit小的时候,效率就很低。

优化:把sql优化成,对key的offset和in两步,即先取offset后的记录的key,然后用in作为条件查完整记录,减少磁盘I/O

4、一个例子

在业务实际使用的时候,会在mapper的接口层(加了@Mapper注解的那个类),加上一个表示这是分库分表用法的自定义注解,例如

@TableSourceConfiguration(key = "orderCode", tableName = "t_vip_order", shardValue = "32", strategy = 3)

按业务的分表策略,得到数据所在的库/表,即数据源名称,比如表名从指定的t_vip_order,会变成具体的t_vip_order_0、t_vip_order_1,或者t_vip_order_cn等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值