日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sharing-jdbc实现读写分离及分库分表

發布時間:2025/3/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sharing-jdbc实现读写分离及分库分表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求:

分庫:按業務線business_id將不同業務線的訂單存儲在不同的數據庫上;

分表:按user_id字段將不同用戶的訂單存儲在不同的表上,為方便直接用非分片字段order_id查詢,可使用基因法;

讀寫分離:為緩解主庫的壓力,讀操作訪問從庫;

庫表SQL

-- 主庫 CREATE DATABASE `database_103`; CREATE DATABASE `database_112`;-- 從庫 CREATE DATABASE `database_slave_103`; CREATE DATABASE `database_slave_112`;--每個庫上分別建立如下表 CREATE TABLE `t_order_0` (`id` bigint(20) NOT NULL,`order_id` bigint(20) NOT NULL,`user_id` bigint(20) NOT NULL,`business_id` bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `t_order_1` (`id` bigint(20) NOT NULL,`order_id` bigint(20) NOT NULL,`user_id` bigint(20) NOT NULL,`business_id` bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `t_order_2` (`id` bigint(20) NOT NULL,`order_id` bigint(20) NOT NULL,`user_id` bigint(20) NOT NULL,`business_id` bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `t_order` VALUES (1,1,112);CREATE TABLE `t_order_3` (`id` bigint(20) NOT NULL,`order_id` bigint(20) NOT NULL,`user_id` bigint(20) NOT NULL,`business_id` bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

pom.xml

<!-- sharding-jdbc --><dependency><groupId>com.dangdang</groupId><artifactId>sharding-jdbc-core</artifactId><version>1.4.2</version></dependency><dependency><groupId>com.dangdang</groupId><artifactId>sharding-jdbc-config-spring</artifactId><version>1.4.0</version></dependency>

spring-database.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:rdb="http://www.dangdang.com/schema/ddframe/rdb"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.dangdang.com/schema/ddframe/rdbhttp://www.dangdang.com/schema/ddframe/rdb/rdb.xsd"><bean id="database_112" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="${jdbc.url.112}"></property><property name="username" value="${jdbc.username.112}"></property><property name="password" value="${jdbc.password.112}"></property><property name="maxActive" value="100"/><property name="initialSize" value="50"/><property name="maxWait" value="60000"/><property name="minIdle" value="5"/></bean><bean id="database_slave_112" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="${jdbc.url.slave.112}"></property><property name="username" value="${jdbc.username.slave.112}"></property><property name="password" value="${jdbc.password.slave.112}"></property><property name="maxActive" value="100"/><property name="initialSize" value="50"/><property name="maxWait" value="60000"/><property name="minIdle" value="5"/></bean><bean id="database_103" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="${jdbc.url.103}"></property><property name="username" value="${jdbc.username.103}"></property><property name="password" value="${jdbc.password.103}"></property><property name="maxActive" value="100"/><property name="initialSize" value="50"/><property name="maxWait" value="60000"/><property name="minIdle" value="5"/></bean><bean id="database_slave_103" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="${jdbc.url.slave.103}"></property><property name="username" value="${jdbc.username.slave.103}"></property><property name="password" value="${jdbc.password.slave.103}"></property><property name="maxActive" value="100"/><property name="initialSize" value="50"/><property name="maxWait" value="60000"/><property name="minIdle" value="5"/></bean><!--mybatis--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="mapperLocations" value="classpath:xmlmapper/*.xml"/><property name="dataSource" ref="shardingDataSource"/><!-- 配置Mybatis配置文件 --><property name="configLocation" value="classpath:/mybatis/mybatis-config.xml"/></bean><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory"/></bean><!-- 注解Mapper scanner --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.lc.sharding.mybatismapper"/><property name="sqlSessionTemplateBeanName" value="sqlSession"/></bean><!-- 事務--><bean id="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="shardingDataSource"/></bean><tx:annotation-driven transaction-manager="txManager"/><!--讀寫分離--><rdb:master-slave-data-source id="rbb_112" master-data-source-ref="database_112"slave-data-sources-ref="database_slave_112"/><rdb:master-slave-data-source id="rbb_103" master-data-source-ref="database_103"slave-data-sources-ref="database_slave_103"/><!--分庫策略--><rdb:strategy id="databaseShardingStrategy" sharding-columns="business_id"algorithm-expression="rbb_${business_id.longValue()}"/><!--分表策略--><rdb:strategy id="tableShardingStrategy" sharding-columns="user_id,order_id"algorithm-class="com.lc.sharding.algorithm.MultipleKeysTableShardingAlgorithmImpl"/><rdb:data-source id="shardingDataSource"><rdb:sharding-rule data-sources="rbb_112,rbb_103"><rdb:table-rules><rdb:table-rule logic-table="t_order" actual-tables="t_order_${0..3}" database-strategy="databaseShardingStrategy"table-strategy="tableShardingStrategy"/></rdb:table-rules></rdb:sharding-rule><rdb:props><prop key="metrics.enable">true</prop><prop key="sql.show">true</prop></rdb:props></rdb:data-source> </beans

基因法多列分片

public class MultipleKeysTableShardingAlgorithmImpl implements MultipleKeysTableShardingAlgorithm {public Collection<String> doSharding(Collection<String> tableNames, Collection<ShardingValue<?>> shardingValues) {List<String> shardingSuffix = new ArrayList<String>();long partId = 0;for (ShardingValue value : shardingValues) {if (value.getColumnName().equals("user_id")) {partId = ((Long) value.getValue()) % 4;break;} else if (value.getColumnName().equals("order_id")) {partId = ((Long) value.getValue()) % 4;break;}}for (String name : tableNames) {if (name.endsWith(partId + "")) {shardingSuffix.add(name);return shardingSuffix;}}return shardingSuffix;} }

什么是基因法分片?

在訂單數據oid生成時,order_id末端加入分片基因,讓同一個user_id下的所有訂單都含有相同基因,落在同一個表上。

資料:https://mp.weixin.qq.com/s/PCzRAZa9n4aJwHOX-kAhtA

根據user_id生成order_id:

public long bulidOrderId(long userId) {//取用戶id后4位userId = userId & 15;//先取60位唯一idlong uniqueId = this.nextId();//唯一id左移4位、拼接userId后4位return (uniqueId << 4) | userId;} this.nextId();//使用雪花算法生成60位分布式唯一id:1位符號位+41位時間戳+5位workId+5位datacenterId+6位序列號+4位基因片

?小結

數據分片:

  • 支持分庫+分表;
  • 可支持 = , BETWEEN,IN等多維度分片,也支持多分片鍵共用;
  • 支持聚合,分組,排序,分頁,關聯等復雜查詢語句;
  • 分片靈活,支持多分片鍵共用,支持inline表達式;
  • 基于Hint的強制路由;
  • 支持分布式主鍵

讀寫分離:

  • 支持一主多從的讀寫分離;
  • 支持分庫分表與讀寫分離共同使用
  • 支持分布式生成全局主鍵。

柔性事務:

  • 最大努力到達型事務

分布式治理:

  • 支持配置中心,可動態修改
  • 支持客戶端熔斷和失效轉移

引用:http://shardingsphere.io/

轉載于:https://www.cnblogs.com/sidesky/p/10669403.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的sharing-jdbc实现读写分离及分库分表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国内成人精品视频 | 国产精品毛片av | 色片在线免费观看 | 一级视频在线 | 老色批永久免费网站www | 驯服少爷漫画免费观看下拉式漫画 | 欧美性猛交xxxx黑人猛交 | 亚洲欧美精品久久 | jjzz国产 | 亚洲在线观看av | 外国av网站| 草草影院第一页yycc.com | 男女操网站 | 韩国精品av | 午夜日韩av| 免费成人在线网站 | 网站毛片 | 日韩欧美精品在线观看 | 久草最新 | 色哟哟官网 | 成人123| 久久成人精品一区二区 | 日韩精品视频久久 | 天天摸天天操天天干 | 伊人影院av| 很污的网站 | 午夜在线国产 | 国产免费脚交足视频在线观看 | 久久久久国产精品视频 | 中文字幕人成人乱码亚洲电影 | 日韩一二三级 | 欧美一区二区三区大屁股撅起来 | 你懂的在线观看视频 | 好吊妞这里有精品 | 精品在线你懂的 | 国产精品污视频 | av在线电影网 | 黄色生活毛片 | 美女网站免费视频 | 美女赤身免费网站 | 国产一线天粉嫩馒头极品av | 91久久精 | 欧美第七页| 制服丝袜手机在线 | 日本女优一区 | 四虎永久在线观看 | 99这里只有 | 欧美激情网址 | 亚洲高清中文字幕 | 国产精品--色哟哟 | 欧美日韩六区 | 新婚夫妇白天啪啪自拍 | 免费观看一区二区三区毛片 | 丝袜一级片| 日韩有码一区二区三区 | 大桥未久av一区二区三区中文 | 伊人网色| 色肉色伦交av色肉色伦 | 下面一进一出好爽视频 | 久久永久免费 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩区一区二 | 国产在线看一区 | 四虎影视黄色 | 69精品在线观看 | 欧洲一区二区三区 | 涩涩屋视频在线观看 | 无码国产69精品久久久久网站 | 久草福利在线观看 | 久草综合在线观看 | 五十路在线观看 | 国精品一区二区三区 | 成年人性生活视频 | 男女涩涩| 国产精品羞羞答答 | 日本sm调教—视频|vk | 国产精品无码久久久久 | 成年人视频网站 | 黄色av网站在线 | 国产欧美激情在线观看 | 男人免费网站 | 灌满闺乖女h高h调教尿h | 中国美女黄色一级片 | 视频一区二区国产 | 亚洲自拍偷拍一区二区 | 欧洲精品一区二区三区 | 久久有精品 | a级小视频| 国产午夜一级 | 色噜噜综合 | 免费涩涩视频 | 性综艺节目av在线播放 | 亚洲精品一区在线观看 | www.夜夜夜 | 欧美日韩久久精品 | 久久网站免费观看 | 最新高清无码专区 | 理论片高清免费理伦片 | 久久久www成人免费精品 |