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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分库分表介绍和Sharding-JDBC快速入门

發(fā)布時(shí)間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分库分表介绍和Sharding-JDBC快速入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.分庫分表介紹

垂直分表:可以把一個(gè)寬表的字段按訪問頻次、是否是大字段的原則拆分為多個(gè)表,這樣既能使業(yè)務(wù)清晰,還能提升部分性能。拆分后,盡量從業(yè)務(wù)角度避免聯(lián)查,否則性能方面將得不償失。

比如我們可以將訪問頻次低的商品描述信息單獨(dú)存放在一張表中,訪問頻次較高的商品基本信息單獨(dú)放在一張表中。

垂直分庫:可以把多個(gè)表按業(yè)務(wù)耦合松緊歸類,分別存放在不同的庫,這些庫可以分布在不同服務(wù)器,從而使訪問壓力被多服務(wù)器負(fù)載,大大提升性能,同時(shí)能提高整體架構(gòu)的業(yè)務(wù)清晰度,不同的業(yè)務(wù)庫可根據(jù)自身情況定制優(yōu)化方案。但是它需要解決跨庫帶來的所有復(fù)雜問題。

比如我們可以有商品庫,訂單庫,配置中心庫等。

水平分庫:可以把一個(gè)表的數(shù)據(jù)(按數(shù)據(jù)行)分到多個(gè)不同的庫,每個(gè)庫只有這個(gè)表的部分?jǐn)?shù)據(jù),這些庫可以分布在不同服務(wù)器,從而使訪問壓力被多服務(wù)器負(fù)載,大大提升性能。它不僅需要解決跨庫帶來的所有復(fù)雜問題,還要解決數(shù)據(jù)路由的問題(數(shù)據(jù)路由問題后邊介紹)。

它帶來的提升是:

  • 解決了單庫大數(shù)據(jù),高并發(fā)的性能瓶頸。

  • 提高了系統(tǒng)的穩(wěn)定性及可用性。

當(dāng)一個(gè)應(yīng)用再細(xì)粒度的垂直切分,或切分后數(shù)據(jù)量行數(shù)巨大,存在單庫讀寫、存儲(chǔ)性能瓶頸,這時(shí)候就需要進(jìn)行水平分庫了,經(jīng)過水平切分的優(yōu)化,往往能解決單庫存儲(chǔ)量及性能瓶頸。但由于同一個(gè)表被分配在不同的數(shù)據(jù)庫,需要額外進(jìn)行數(shù)據(jù)操作的路由工作,因此大大提升了系統(tǒng)復(fù)雜度 。

水平分表:可以把一個(gè)表的數(shù)據(jù)(按數(shù)據(jù)行)分到多個(gè)同一個(gè)數(shù)據(jù)庫的多張表中,每個(gè)表只有這個(gè)表的部分?jǐn)?shù)據(jù),這樣做能小幅提升性能,它僅僅作為水平分庫的一個(gè)補(bǔ)充優(yōu)化。

它帶來的提升是: 優(yōu)化單一表數(shù)據(jù)量過大而產(chǎn)生的性能問題 避免IO爭搶并減少鎖表的幾率 庫內(nèi)的水平分表,解決了單一表數(shù)據(jù)量過大的問題,分出來的小表中只包含一部分?jǐn)?shù)據(jù),從而使得單個(gè)表的數(shù)據(jù)量變小,提高檢索性能

2.水平分庫分表示例

下面我們簡單給個(gè)水平分庫和水平分表的示例:

比如我們先這樣有一個(gè)用戶的操作日志表,由于數(shù)據(jù)庫巨大,我們需要將日志按某個(gè)規(guī)則進(jìn)行分庫分表的拆分。

我們的日志主庫為bc。

  • 方法1:

我們首先進(jìn)行水平分庫。按用戶的id的最后一位對2取余,如果是單數(shù),則放到bc_0庫中,如果是雙數(shù),則放到bc_1庫中。

然后我們將日志中的create_time進(jìn)行格式化為yyyy-MM-dd的格式,在bc_0和bc_1中按時(shí)間進(jìn)行水平分表,具體如下圖:

?

  • 方法2:

我們按用戶id將日志拆分到10個(gè)數(shù)據(jù)庫中,分別為bc_0到bc_9。然后對id對10取余,水平分庫到不同的數(shù)據(jù)庫中,然后在每個(gè)數(shù)據(jù)庫中,我們都設(shè)置100張表,分別為balance_log_0到balance_log_100。當(dāng)用戶分到對應(yīng)的數(shù)據(jù)庫中后,在對100取余,分到對應(yīng)的表中。具體如下圖:

?

3.分庫分表帶來的問題

分庫分表能有效的緩解了單機(jī)和單庫帶來的性能瓶頸和壓力,突破網(wǎng)絡(luò)IO、硬件資源、連接數(shù)的瓶頸,同時(shí)也帶來了一些問題。

(1)事務(wù)一致性問題

由于分庫分表把數(shù)據(jù)分布在不同庫甚至不同服務(wù)器,不可避免會(huì)帶來分布式事務(wù)問題。

(2)跨節(jié)點(diǎn)關(guān)聯(lián)查詢

在沒有分庫前,我們檢索商品時(shí)可以通過以下SQL對店鋪信息進(jìn)行關(guān)聯(lián)查詢:

SELECT p.*,r.[地理區(qū)域名稱],s.[店鋪名稱],s.[信譽(yù)] FROM [商品信息] p LEFT JOIN [地理區(qū)域] r ON p.[產(chǎn)地] = r.[地理區(qū)域編碼] LEFT JOIN [店鋪信息] s ON p.id = s.[所屬店鋪] WHERE...ORDER BY...LIMIT...

但垂直分庫后[商品信息]和[店鋪信息]不在一個(gè)數(shù)據(jù)庫,甚至不在一臺(tái)服務(wù)器,無法進(jìn)行關(guān)聯(lián)查詢。

可將原關(guān)聯(lián)查詢分為兩次查詢,第一次查詢的結(jié)果集中找出關(guān)聯(lián)數(shù)據(jù)id,然后根據(jù)id發(fā)起第二次請求得到關(guān)聯(lián)數(shù)據(jù),最后將獲得到的數(shù)據(jù)進(jìn)行拼裝。

(3)跨節(jié)點(diǎn)分頁、排序函數(shù)

跨節(jié)點(diǎn)多庫進(jìn)行查詢時(shí),limit分頁、order by排序等問題,就變得比較復(fù)雜了。需要先在不同的分片節(jié)點(diǎn)中將數(shù)據(jù)進(jìn)行排

序并返回,然后將不同分片返回的結(jié)果集進(jìn)行匯總和再次排序。

如進(jìn)行水平分庫后的商品庫,按ID倒序排序分頁,取第一頁:

?

以上流程是取第一頁的數(shù)據(jù),性能影響不大,但由于商品信息的分布在各數(shù)據(jù)庫的數(shù)據(jù)可能是隨機(jī)的,如果是取第N頁,

需要將所有節(jié)點(diǎn)前N頁數(shù)據(jù)都取出來合并,再進(jìn)行整體的排序,操作效率可想而知。所以請求頁數(shù)越大,系統(tǒng)的性能也會(huì)

越差。

在使用Max、Min、Sum、Count之類的函數(shù)進(jìn)行計(jì)算的時(shí)候,與排序分頁同理,也需要先在每個(gè)分片上執(zhí)行相應(yīng)的函數(shù),

然后將各個(gè)分片的結(jié)果集進(jìn)行匯總和再次計(jì)算,最終將結(jié)果返回。

(4)主鍵避重

在分庫分表環(huán)境中,由于表中數(shù)據(jù)同時(shí)存在不同數(shù)據(jù)庫中,主鍵值平時(shí)使用的自增長將無用武之地,某個(gè)分區(qū)數(shù)據(jù)庫生成

的ID無法保證全局唯一。因此需要單獨(dú)設(shè)計(jì)全局主鍵,以避免跨庫主鍵重復(fù)問題。

?

4.公共表

實(shí)際的應(yīng)用場景中,參數(shù)表、數(shù)據(jù)字典表等都是數(shù)據(jù)量較小,變動(dòng)少,而且屬于高頻聯(lián)合查詢的依賴表。例子中地理區(qū)域

表也屬于此類型。

可以將這類表在每個(gè)數(shù)據(jù)庫都保存一份,所有對公共表的更新操作都同時(shí)發(fā)送到所有分庫執(zhí)行。由于分庫分表之后,數(shù)據(jù)

被分散在不同的數(shù)據(jù)庫、服務(wù)器。因此,對數(shù)據(jù)的操作也就無法通過常規(guī)方式完成,并且它還帶來了一系列的問題。好

在,這些問題不是所有都需要我們在應(yīng)用層面上解決,市面上有很多中間件可供我們選擇,其中Sharding-JDBC使用流行

度較高,我們來了解一下它。

5.Sharding-JDBC介紹

Sharding-JDBC是當(dāng)當(dāng)網(wǎng)研發(fā)的開源分布式數(shù)據(jù)庫中間件,從 3.0 開始Sharding-JDBC被包含在 Sharding-Sphere中,之

后該項(xiàng)目進(jìn)入進(jìn)入Apache孵化器,4.0版本之后的版本為Apache版本。

ShardingSphere是一套開源的分布式數(shù)據(jù)庫中間件解決方案組成的生態(tài)圈,它由Sharding-JDBC、ShardingProxy和

Sharding-Sidecar(計(jì)劃中)這3款相互獨(dú)立的產(chǎn)品組成。 他們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)分片、分布式事務(wù)和數(shù)據(jù)庫治理功

能,可適用于如Java同構(gòu)、異構(gòu)語言、容器、云原生等各種多樣化的應(yīng)用場景。

官方地址:https://shardingsphere.apache.org/document/current/cn/overview/

咱們目前只需關(guān)注Sharding-JDBC,它定位為輕量級(jí)Java框架,在Java的JDBC層提供的額外服務(wù)。 它使用客戶端直連數(shù)

據(jù)庫,以jar包形式提供服務(wù),無需額外部署和依賴,可理解為增強(qiáng)版的JDBC驅(qū)動(dòng),完全兼容JDBC和各種ORM框架。

Sharding-JDBC的核心功能為數(shù)據(jù)分片和讀寫分離,通過Sharding-JDBC,應(yīng)用可以透明的使用jdbc訪問已經(jīng)分庫分表、

讀寫分離的多個(gè)數(shù)據(jù)源,而不用關(guān)心數(shù)據(jù)源的數(shù)量以及數(shù)據(jù)如何分布。

  • 適用于任何基于Java的ORM框架,如: Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。

  • 基于任何第三方的數(shù)據(jù)庫連接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。

  • 支持任意實(shí)現(xiàn)JDBC規(guī)范的數(shù)據(jù)庫。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

6.Sharding-JDBC快速入門

1.需求說明

人工創(chuàng)建兩張表,t_order_1和t_order_2,這兩張表是訂單表拆分后的表,通過Sharding-Jdbc向訂單表插入數(shù)據(jù),按照一

定的分片規(guī)則,主鍵為偶數(shù)的進(jìn)入t_order_1,另一部分?jǐn)?shù)據(jù)進(jìn)入t_order_2,通過Sharding-Jdbc 查詢數(shù)據(jù),根據(jù) SQL語

句的內(nèi)容從t_order_1或t_order_2查詢數(shù)據(jù) 。

2.創(chuàng)建數(shù)據(jù)庫

--創(chuàng)建訂單庫order_db ? CREATE DATABASE `order_db` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; ? --在order_db中創(chuàng)建t_order_1、t_order_2表 ? DROP TABLE IF EXISTS `t_order_1`; CREATE TABLE `t_order_1` ( `order_id` bigint(20) NOT NULL COMMENT '訂單id', `price` decimal(10, 2) NOT NULL COMMENT '訂單價(jià)格', `user_id` bigint(20) NOT NULL COMMENT '下單用戶id', `status` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '訂單狀態(tài)', PRIMARY KEY (`order_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; DROP TABLE IF EXISTS `t_order_2`; CREATE TABLE `t_order_2` ( `order_id` bigint(20) NOT NULL COMMENT '訂單id', `price` decimal(10, 2) NOT NULL COMMENT '訂單價(jià)格', `user_id` bigint(20) NOT NULL COMMENT '下單用戶id', `status` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '訂單狀態(tài)', PRIMARY KEY (`order_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

3.引入maven依賴

? ? ? ?<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency> ?<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency> ?<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency> ?<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency> ?<!-- sharding-jdbc和SpringBoot整合的Jar包 --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId></dependency>

4.分片規(guī)則配置

分片規(guī)則配置是sharding-jdbc進(jìn)行對分庫分表操作的重要依據(jù),配置內(nèi)容包括:數(shù)據(jù)源、主鍵生成策略、分片策略等。

在application.properties中配置 :

server.port=56081 ? spring.application.name = sharding-jdbc-simple-demo ? server.servlet.context-path = /sharding-jdbc-simple-demo spring.http.encoding.enabled = true spring.http.encoding.charset = UTF-8 spring.http.encoding.force = true ? spring.main.allow-bean-definition-overriding = true ? mybatis.configuration.map-underscore-to-camel-case = true ? #sharding-jdbc分片規(guī)則配置 #數(shù)據(jù)源 spring.shardingsphere.datasource.names = m1 ? spring.shardingsphere.datasource.m1.type = com.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.m1.driver-class-name = com.mysql.jdbc.Driver spring.shardingsphere.datasource.m1.url = jdbc:mysql://localhost:3306/order_db?useUnicode=true spring.shardingsphere.datasource.m1.username = root spring.shardingsphere.datasource.m1.password = root ? # 指定t_order表的數(shù)據(jù)分布情況,配置數(shù)據(jù)節(jié)點(diǎn) m1.t_order_1,m1.t_order_2 spring.shardingsphere.sharding.tables.t_order.actual-data-nodes = m1.t_order_$->{1..2} ? # 指定t_order表的主鍵生成策略為SNOWFLAKE spring.shardingsphere.sharding.tables.t_order.key-generator.column=order_id spring.shardingsphere.sharding.tables.t_order.key-generator.type=SNOWFLAKE ? # 指定t_order表的分片策略,分片策略包括分片鍵和分片算法 spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.sharding-column = order_id spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression = t_order_$->{order_id % 2 + 1} ? # 打開sql輸出日志 spring.shardingsphere.props.sql.show = true ? swagger.enable = true ? logging.level.root = info logging.level.org.springframework.web = info logging.level.com.itheima.dbsharding ?= debug logging.level.druid.sql = debug ?

(1)首先定義數(shù)據(jù)源m1,并對m1進(jìn)行實(shí)際的參數(shù)配置。

(2)指定t_order表的數(shù)據(jù)分布情況,他分布在m1.t_order_1,m1.t_order_2

(3)指定t_order表的主鍵生成策略為SNOWFLAKE,SNOWFLAKE是一種分布式自增算法,保證id全局唯一

(4)定義t_order分片策略,order_id為偶數(shù)的數(shù)據(jù)落在t_order_1,為奇數(shù)的落在t_order_2,分表策略的表達(dá)式為

t_order_$->{order_id % 2 + 1}

5.數(shù)據(jù)操作

@Mapper @Component public interface OrderDao { ?/*** 插入訂單* @param price* @param userId* @param status* @return*/@Insert("insert into t_order(price,user_id,status)values(#{price},#{userId},#{status})")int insertOrder(@Param("price")BigDecimal price,@Param("userId")Long userId,@Param("status")String status); ?/*** 根據(jù)id列表查詢訂單* @param orderIds* @return*/@Select("<script>" +"select" +" * " +" from t_order t " +" where t.order_id in " +" <foreach collection='orderIds' open='(' separator=',' close=')' item='id'>" +" #{id} " +" </foreach>" +"</script>")List<Map> selectOrderbyIds(@Param("orderIds") List<Long> orderIds); } ?

6.測試

? ?@Testpublic void testInsertOrder(){for(int i=1;i<20;i++){orderDao.insertOrder(new BigDecimal(i),1L,"SUCCESS");}} ?

?

通過日志可以發(fā)現(xiàn)order_id為奇數(shù)的被插入到t_order_2表,為偶數(shù)的被插入到t_order_1表,達(dá)到預(yù)期目標(biāo)。

? ?@Testpublic void testSelectOrderbyIds(){List<Long> ids = new ArrayList<>();ids.add(373897739357913088L);ids.add(373897037306920961L); ?List<Map> maps = orderDao.selectOrderbyIds(ids);System.out.println(maps);}

?

通過日志可以發(fā)現(xiàn),根據(jù)傳入order_id的奇偶不同,sharding-jdbc分別去不同的表檢索數(shù)據(jù),達(dá)到預(yù)期目標(biāo)。

7.流程分析

通過日志分析,Sharding-JDBC在拿到用戶要執(zhí)行的sql之后干了哪些事兒:

(1)解析sql,獲取片鍵值,在本例中是order_id

(2)Sharding-JDBC通過規(guī)則配置 t_order_$->{order_id % 2 + 1},知道了當(dāng)order_id為偶數(shù)時(shí),應(yīng)該往t_order_1表插數(shù)

據(jù),為奇數(shù)時(shí),往t_order_2插數(shù)據(jù)。

(3)于是Sharding-JDBC根據(jù)order_id的值改寫sql語句,改寫后的SQL語句是真實(shí)所要執(zhí)行的SQL語句。

(4)執(zhí)行改寫后的真實(shí)sql語句

(5)將所有真正執(zhí)行sql的結(jié)果進(jìn)行匯總合并,返回。

8.SpringBoot的另外3種集成方式

(1)yml配置

server:port: 56081servlet:context-path: /sharding-jdbc-simple-demo spring:application:name: sharding-jdbc-simple-demohttp:encoding:enabled: truecharset: utf-8force: truemain:allow-bean-definition-overriding: trueshardingsphere:datasource:names: m1m1:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/order_db?useUnicode=trueusername: rootpassword: rootsharding:tables:t_order:actualDataNodes: m1.t_order_$->{1..2}tableStrategy:inline:shardingColumn: order_idalgorithmExpression: t_order_$->{order_id % 2 + 1}keyGenerator:type: SNOWFLAKEcolumn: order_idprops:sql:show: true mybatis:configuration:map-underscore-to-camel-case: true swagger:enable: true logging:level:root: infoorg.springframework.web: infocom.itheima.dbsharding: debugdruid.sql: debug

(2)java配置

@Configuration public class ShardingJdbcConfig { ?//配置分片規(guī)則// 定義數(shù)據(jù)源Map<String, DataSource> createDataSourceMap() {DruidDataSource dataSource1 = new DruidDataSource();dataSource1.setDriverClassName("com.mysql.jdbc.Driver");dataSource1.setUrl("jdbc:mysql://localhost:3306/order_db?useUnicode=true");dataSource1.setUsername("root");dataSource1.setPassword("root");Map<String, DataSource> result = new HashMap<>();result.put("m1", dataSource1);return result;}// 定義主鍵生成策略private static KeyGeneratorConfiguration getKeyGeneratorConfiguration() {KeyGeneratorConfiguration result = new KeyGeneratorConfiguration("SNOWFLAKE","order_id");return result;} ?// 定義t_order表的分片策略TableRuleConfiguration getOrderTableRuleConfiguration() {TableRuleConfiguration result = new TableRuleConfiguration("t_order","m1.t_order_$->{1..2}");result.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order_$->{order_id % 2 + 1}"));result.setKeyGeneratorConfig(getKeyGeneratorConfiguration()); ?return result;}// 定義sharding-Jdbc數(shù)據(jù)源@BeanDataSource getShardingDataSource() throws SQLException {ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());//spring.shardingsphere.props.sql.show = trueProperties properties = new Properties();properties.put("sql.show","true");return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig,properties);} ? }

由于采用了配置類所以需要屏蔽原來application.properties文件中spring.shardingsphere開頭的配置信息。

還需要在SpringBoot啟動(dòng)類中屏蔽使用spring.shardingsphere配置項(xiàng)的類:

@SpringBootApplication(exclude = {SpringBootConfiguration.class}) public class ShardingJdbcSimpleDemoBootstrap {....}

(3)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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:sharding="http://shardingsphere.apache.org/schema/shardingsphere/sharding" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring‐beans.xsd http://shardingsphere.apache.org/schema/shardingsphere/sharding http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring‐context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring‐tx.xsd"> <context:annotation‐config /> <!‐‐定義多個(gè)數(shù)據(jù)源‐‐> <bean id="m1" class="com.alibaba.druid.pool.DruidDataSource" destroy‐method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/order_db_1?useUnicode=true" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <!‐‐定義分庫策略‐‐> <sharding:inline‐strategy id="tableShardingStrategy" sharding‐column="order_id" algorithm‐ expression="t_order_$‐>{order_id % 2 + 1}" /> <!‐‐定義主鍵生成策略‐‐> <sharding:key‐generator id="orderKeyGenerator" type="SNOWFLAKE" column="order_id" /> <!‐‐定義sharding‐Jdbc數(shù)據(jù)源‐‐> <sharding:data‐source id="shardingDataSource"> <sharding:sharding‐rule data‐source‐names="m1"> <sharding:table‐rules> <sharding:table‐rule logic‐table="t_order" table‐strategy‐ ref="tableShardingStrategy" key‐generator‐ref="orderKeyGenerator" /> </sharding:table‐rules> </sharding:sharding‐rule> </sharding:data‐source> </beans>

?

總結(jié)

以上是生活随笔為你收集整理的分库分表介绍和Sharding-JDBC快速入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久久久综合色一本 | 免费一级片视频 | 国产男男gay体育生白袜 | www,av在线| 色精品| 一区二区三区精品国产 | 精品一区二区久久久 | 亚洲无吗在线 | 日韩在线三区 | 国内自拍一区 | 在线观看日本一区 | 极品超粉嫩尤物69xx | 免费黄色三级网站 | 久久免费毛片 | 国产精品18久久久 | 亚瑟av在线 | 蜜桃av在线看 | 啪啪的网站 | xiuxiuavnet | 麻豆出品| 欧美亚洲一二三区 | 免费成年人视频 | 欧美性白人极品1819hd | av一区二区三区在线观看 | 97小视频 | 思思99精品视频在线观看 | 日穴视频 | 欧美精品卡一卡二 | 国产探花在线观看 | 小辣椒福利视频导航 | 国产美女网| 中文字幕一区二区久久人妻网站 | 亚洲国产成人精品无码区99 | 亚洲国产v | 日韩一级片免费 | 熟妇人妻av无码一区二区三区 | 色八区| 国产真人无遮挡作爱免费视频 | 欧美日韩免费高清 | 亚洲午夜精品一区二区三区 | 在线观看国产黄 | www.欧美在线观看 | 亚洲精品视频在线 | 日韩av影音先锋 | 国产真实乱人偷精品人妻 | 精品美女视频 | 一级淫片在线观看 | 99久久精品无码一区二区毛片 | 国产精品外围 | 亚洲欧美激情图片 | 黄色网络在线观看 | 久久久天堂国产精品女人 | 伊人五月综合 | chinesepron hd videos国产91 | 国产一区二区免费视频 | 国产拍拍视频 | 亚洲一区二区三区视频 | 91欧美激情一区二区三区 | 三级全黄做爰龚玥菲在线 | 成人污污视频 | 久久九九免费 | 婷婷视频| 国产一级免费av | 久久精品国产免费看久久精品 | 日韩综合在线 | 高清一区二区三区四区五区 | 波多野结衣简介 | 天天干天天操天天舔 | 亚洲爱情岛论坛永久 | 蜜臀aⅴ国产精品久久久国产老师 | 日本天堂网在线观看 | 成人性生交大片 | 日韩av中文在线观看 | 欧美粗暴jizz性欧美20 | 白浆av | 亚洲第8页 | 免费在线观看日韩av | 手机av免费在线 | 99视频观看| 国产丰满麻豆 | 性感少妇在线观看 | 天天舔天天爱 | 一眉道姑| 亚天堂 | 久久手机看片 | 免费黄网在线看 | 天天射天天干天天色 | 日本午夜小视频 | 国产乱一区二区三区 | 麻豆一级片 | 亚洲成人偷拍 | 欧美黄色三级 | 伊人激情视频 | 三级不卡视频 | 国产成人精品一区二区三区视频 | 黄色片视频免费看 | 成年人视频在线免费看 | 久久午夜电影网 | 男男av网站|