TDDL和Diamond的使用

https://github.com/alibaba/tb_tddl

在使用tddl 之前首选安装 配置diamond

注意:由于淘宝博客地址变迁,在上文两个链接网页中的文档连接已不可用,新的地址迁移到了:
Diamond相关:
diamond专题第一期,主要介绍了diamond的概况和快速使用,
文章链接:http://jm-blog.aliapp.com/?p=1588
diamond专题第二期,主要介绍了diamond的核心原理,
文章链接:http://jm-blog.aliapp.com/?p=1592
diamond专题第三期,主要介绍了diamond的架构,
文章链接:http://jm-blog.aliapp.com/?p=1606
diamond专题第四期,主要介绍了diamond的容灾机制,
文章链接:http://jm-blog.aliapp.com/?p=1617
TDDL相关:
TDDL动态数据源基本说明:http://jm-blog.aliapp.com/?p=1642
TDDL示例说明:http://jm-blog.aliapp.com/?p=1645

1.创建数据源

          由DBA来做。

           一般数据源有3层:

          (1)Matrix

                     分库分表,数据路由,对应一个应用,下面有若干个group

 

          (2)Group

                     主备切换,读写分离,对应一组主备数据库,下面有若干atom

          (3)Atom

                     对应一个数据库实例

 

 

2.创建分库分表规则

              (1)编写规则文件

                        实际上就是spring配置文件的一部分

 


 
  1. <?xml version="1.0" encoding="gb2312"?>

  2.  
  3. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

  4.  
  5. "http://www.springframework.org/dtd/spring-beans.dtd">

  6.  
  7. <beans>

  8.  
  9. <!--这个bean配置为TDDL规则总配置-->

  10.  
  11. <bean id="vtabroot" class="com.taobao.tddl.interact.rule.VirtualTableRoot" init-method="init">

  12.  
  13. <!--没有被配置在tableRules的逻辑表都将在这个group里,以单表形式执行-->

  14.  
  15. <property name="defaultDbIndex" value="TDDL_DEFAULT_GROUP" />

  16.  
  17. <!--数据库类型,默认是mysql -->

  18.  
  19. <property name="dbType" value="MYSQL"></property>

  20.  
  21. <!--该map配置有分表的逻辑表,有几个表有分表就配置几个键值对(该事例表示只有三个表需要分表)-->

  22.  
  23. <property name="tableRules">

  24.  
  25. <map>

  26.  
  27. <!-- key是逻辑表名,value指的是对应具体配置的id -->

  28.  
  29. <entry key="user" value-ref="user_bean"></entry>

  30.  
  31. <!--逻辑表名为admin,具体的分表规则在id="admin_bean"的配置中-->

  32.  
  33. <entry key="admin" value-ref="admin_bean"></entry>

  34.  
  35. <!--这张表是单表,可以配置在这,不配置的话默认走defaultDbIndex -->

  36.  
  37. <entry key="picture" value-ref="picture_bean"></entry>

  38.  
  39. </map>

  40.  
  41. </property>

  42.  
  43. </bean>

  44.  
  45. <!--按照user_id取模划分64张表,表明具体为'user_0000'-'user_0063',

  46.  
  47. 'user_0000'-'user_0031'在'TDDL_0000_GROUP'中,

  48.  
  49. 'user_0032'-'user_0063'在'TDDL_0001_GROUP'中-->

  50.  
  51. <bean id="user_bean" class="com.taobao.tddl.interact.rule.TableRule">

  52.  
  53. <!-- groupKey格式框架,{}中的数将会被dbRuleArray的值替代,并保持位数-->

  54.  
  55. <property name="dbNamePattern" value="TDDL_{0000}_GROUP" />

  56.  
  57. <!--具体的分库规则-->

  58.  
  59. <property name="dbRuleArray">

  60.  
  61. <!--按照user_id取模划分64张表,结果除以32后分到两个库中-->

  62.  
  63. <value>(#user_id,1,64#.longValue() % 64).intdiv(32)</value>

  64.  
  65. </property>

  66.  
  67. <!--具体表名格式框架,{}中的数将会被tbRuleArray的值替代,并保持位数-->

  68.  
  69. <property name="tbNamePattern" value="user_{0000}"></property>

  70.  
  71. <!--具体的分表规则-->

  72.  
  73. <property name="tbRuleArray">

  74.  
  75. <!--按照user_id取模划分64张表-->

  76.  
  77. <value>#user_id,1,64#.longValue() % 64</value>

  78.  
  79. </property>

  80.  
  81. <!--全表扫描开关,默认关闭,是否允许应用端在没有给定分表键值的情况下查询全表-->

  82.  
  83. <property name="allowFullTableScan" value="true" />

  84.  
  85. </bean>

  86.  
  87. <!--按照user_id取模划分4张表,表名具体为'admin_00'-'admin_03',

  88.  
  89. 所有表都在'TDDL_DEFAULT_GROUP'中-->

  90.  
  91. <bean id="admin_bean" class="com.taobao.tddl.interact.rule.TableRule">

  92.  
  93. <!--分库规则,该表没有分库,所有表都在这个group上-->

  94.  
  95. <property name="dbNamePattern" value="TDDL_DEFAULT_GROUP" />

  96.  
  97. <property name="tbNamePattern" value="admin_{00}"></property>

  98.  
  99. <property name="tbRuleArray">

  100.  
  101. <value>#user_id,1,4#.longValue() % 4</value>

  102.  
  103. </property>

  104.  
  105. </bean>

  106.  
  107. <!--即不分库也不分表-->

  108.  
  109. <bean id="picture_bean" class="com.taobao.tddl.interact.rule.TableRule">

  110.  
  111. <property name="dbNamePattern" value="TDDL_DEFAULT_GROUP" />

  112.  
  113. <property name="tbNamePattern" value="picture"></property>

  114.  
  115. </bean>

  116. </beans>

 

              (2)使用规则

                         1)远端配置

                                在tddl 的ops中->TDDL配置管理->新增配置,然后将编写的规则文件内容复制进去,提交即可

                         2)本地配置

                                将规则文件放置在项目路径中即可

 

3.创建应用

              (1)添加依赖

 


 
  1. <dependency>

  2. <groupId>com.taobao.tddl</groupId>

  3. <artifactId>tddl-client</artifactId>

  4. <type>jar</type>

  5. </dependency>

              (2)在spring配置文件中配置tddl

 


 
  1. <bean id="s2sTddlGroupDataSource" class="com.taobao.tddl.jdbc.group.TGroupDataSource" init-method="init">

  2. <property name="appName" value="${alibaba.intl.s2s.tddl.appname}"></property>

  3. <!--<property name="appRuleFile" value="tddl-rule.xml"></property>-->

  4.  
  5. <property name="dbGroupKey" value="${alibaba.intl.s2s.tddl.groupname}"></property>

  6. <property name="dataSourceType" value="DruidDataSource"></property>

  7. <property name="dynamicRule" value="true"></property>

  8. <!--<property name="useLocalConfig" value="true"></property>-->

  9. </bean>

                         appName指的是应用的名称,需要和在tddl ops上配置的appName一致

                         dynamicRule表示配置放在diamond上,useLocalConfig表示配置放置在本地,appRuleFile表示本地的规则文件的路径   
 

              (3)有了这个数据源之后,就可以将数据源配置到jdbc、ibatis等Template中了

 


 
  1. <bean id="s2sSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

  2. <property name="configLocation" value="/biz/sqlmap-s2s.xml" />

  3. <property name="dataSource" ref="s2sTddlGroupDataSource" />

  4. </bean>


              然后就可以像使用一个数据库一张表一样进行开发了

©️2020 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值