欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Sharding-JDBC使用入門和基本配置

服務(wù)器

【技術(shù)沙龍002期】數(shù)據(jù)中臺:宜信敏捷數(shù)據(jù)中臺建設(shè)實踐|宜信技術(shù)沙龍 將于5月23日晚8點線上直播,點擊報名

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都做網(wǎng)站、久治網(wǎng)絡(luò)推廣、小程序制作、久治網(wǎng)絡(luò)營銷、久治企業(yè)策劃、久治品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供久治建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:aaarwkj.com一、什么是Sharding-JDBC

Sharding-JDBC定位為輕量級Java框架,在Java的JDBC層提供的額外服務(wù)。它使用客戶端直連數(shù)據(jù)庫,以jar包形式提供服務(wù),無需額外部署和依賴,可理解為增強版的JDBC驅(qū)動,完全兼容JDBC和各種ORM框架。

二、Sharding-JDBC能做什么

分庫 & 分表

讀寫分離

分布式主鍵

分布式事務(wù)

三、適用項目框架

Sharding-JDBC適用于:

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

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

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

四、Maven依賴
<!--shardingjdbc開始-->
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-core</artifactId>
<version>${sharding.version}</version>
</dependency>
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>${sharding.version}</version>
</dependency>
<!—如果不配置分布式事務(wù)的話配置上邊兩個就夠了-->
<!--分布式事務(wù)引用依賴-->
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-transaction-2pc-xa</artifactId>
<version>${sharding.version}</version>
</dependency>
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-transaction-spring</artifactId>
<version>${sharding.version}</version>
</dependency>
<!--shardingjdbc結(jié)束-->
<!--AspectJAOP支持-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectjweaver.version}</version>
</dependency>
五、讀寫分離 5.1 數(shù)據(jù)源配置

先配置數(shù)據(jù)源

也可以配置讀寫分離

以下配置是 ds0 ds1 兩個數(shù)據(jù)庫的主和從一共四個數(shù)據(jù)源。

parentDs 是數(shù)據(jù)源公共的配置,抽出去以免寫重復(fù)代碼。

<!--ds0的主-->
<beanid="ds0_master"class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"parent="parentDs">
<propertyname="driverClassName"value=""/>
<propertyname="url"value=""/>
</bean>
<!--ds0的從-->
<beanid="ds0_slave"class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"parent="parentDs">
<propertyname="driverClassName"value=""/>
<propertyname="url"value="${sharding.connection.url.0}"/>
</bean>
<!--ds1的主-->
<beanid="ds1_master"class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"parent="parentDs">
<propertyname="driverClassName"value=""/>
<propertyname="url"value="${sharding.connection.url.1}"/>
</bean>
<!--ds1的從-->
<beanid="ds1_slave"class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"parent="parentDs">
<propertyname="driverClassName"value=""/>
<propertyname="url"value="${sharding.connection.url.1}"/>
</bean>
5.2 讀寫分離配置

只配置主從不配置分庫分表的情況如下,如果要配置分庫分表則不需要下面這個配置。

master-data-source-name 是主數(shù)據(jù)源ID

slave-data-source-names 是從數(shù)據(jù)源ID

<master-slave:data-sourceid="masterSlaveDataSource"master-data-source-name="ds0_master,ds1_master"slave-data-source-names="ds0_slave,ds1_slave">
<master-slave:props>
<propkey="sql.show">${sql_show}</prop>
<propkey="executor.size">10</prop>
<propkey="foo">bar</prop>
</master-slave:props>
</master-slave:data-source>
5.3 讀寫分離和分庫分表一起配置

如果讀寫分離和分庫分表一起使用的話把主從路由配置到 shardingdata-source下就可以了。

sharding:master-slave-rule 的 id 就是配置出來的邏輯的數(shù)據(jù)源的名稱,如果多個從的話還可以通過配置strategy-ref來配置負(fù)載均衡。

master-data-source 配置的是主庫數(shù)據(jù)源ID 。

slave-data-source 配置的是從庫數(shù)據(jù)源ID,多個以逗號分開。

<!--sharding數(shù)據(jù)源-->
<sharding:data-sourceid="shardingDataSource">
<!--讀寫分離的話要把所有的主從數(shù)據(jù)源都寫在這里-->
<sharding:sharding-rule
data-source-names="ds0_master,ds0_slave,ds1_master,ds1_slave">
<!--讀寫分離的路由一主一從配置strategy-ref-->
<sharding:master-slave-rules>
<sharding:master-slave-ruleid="ds0"master-data-source-name="ds0_master"slave-data-source-names="ds0_slave"/>
<sharding:master-slave-ruleid="ds1"master-data-source-name="ds1_master"slave-data-source-names="ds1_slave"/>
</sharding:master-slave-rules>
<!--讀寫分離配置結(jié)束-->
<sharding:table-rules>
<!—這里是分庫分表路由的配置-->
</sharding:table-rules>
<sharding:binding-table-rules>
<!—-綁定表的配置-->
</sharding:binding-table-rules>
</sharding:sharding-rule>
<sharding:props>
<!--顯示SQL-->
<propkey="sql.show">true</prop>
</sharding:props>
</sharding:data-source>
六、數(shù)據(jù)分片 6.1 分片支持

Sharding-JDBC提供了5種分片策略。由于分片算法和業(yè)務(wù)實現(xiàn)緊密相關(guān),因此Sharding-JDBC并未提供內(nèi)置分片算法,而是通過分片策略將各種場景提煉出來,提供更高層級的抽象,并提供接口讓應(yīng)用開發(fā)者自行實現(xiàn)分片算法。

StandardShardingStrategy

標(biāo)準(zhǔn)分片策略。提供對SQL語句中的=, IN和BETWEEN AND的分片操作支持。StandardShardingStrategy只支持單分片鍵,提供PreciseShardingAlgorithm和RangeShardingAlgorithm兩個分片算法。PreciseShardingAlgorithm是必選的,用于處理=和IN的分片;RangeShardingAlgorithm是可選的,用于處理BETWEEN AND分片,如果不配置RangeShardingAlgorithm,SQL中的BETWEEN AND將按照全庫路由處理。

ComplexShardingStrategy

復(fù)合分片策略。提供對SQL語句中的=, IN和BETWEEN AND的分片操作支持。ComplexShardingStrategy支持多分片鍵,由于多分片鍵之間的關(guān)系復(fù)雜,因此Sharding-JDBC并未做過多的封裝,而是直接將分片鍵值組合以及分片操作符交于算法接口,完全由應(yīng)用開發(fā)者實現(xiàn),提供的靈活度。

InlineShardingStrategy

Inline表達式分片策略。使用Groovy的Inline表達式,提供對SQL語句中的=和IN的分片操作支持。InlineShardingStrategy只支持單分片鍵,對于簡單的分片算法,可以通過簡單的配置使用,從而避免繁瑣的Java代碼開發(fā),如: tuser${user_id % 8} 表示t_user表按照user_id按8取模分成8個表,表名稱為t_user_0到t_user_7。

HintShardingStrategy

通過Hint而非SQL解析的方式分片的策略。

NoneShardingStrategy

不分片的策略。

6.2 分片配置

標(biāo)準(zhǔn)分片配置

<!--標(biāo)準(zhǔn)分片策略。-->
<beanid="demoUserStandardStrategy"class="shard.strategy.DemoUserStandardStrategy"/>
<sharding:standard-strategyid="shardingDemoUserStandardStrategy"
precise-algorithm-ref="demoUserStandardStrategy"sharding-column="id"range-algorithm-ref=""/>

DemoUserStandardStrategy標(biāo)準(zhǔn)分片要實現(xiàn) PreciseShardingAlgorithm 接口,doSharding的兩個參數(shù)一個是所有數(shù)據(jù)源的cllection.另一個參數(shù)是執(zhí)行SQL時傳過來的分片的值。

/**
*根據(jù)ID取
*標(biāo)準(zhǔn)分片策略
*用于處理=和IN的分片
*@authoryulonggao
*@date2019/1/3114:35
*/
@Slf4j
publicclassDemoUserStandardStrategyimplementsPreciseShardingAlgorithm<Long>{
@Override
publicStringdoSharding(Collection<String>collection,PreciseShardingValue<Long>preciseShardingValue){
//這個里邊有異常會被處理掉,然后導(dǎo)致拿不到分片。但出異常一般是業(yè)務(wù)代碼寫錯了。
//每條指定分片的操作都會調(diào)用此方法,如果是in條件查詢的話每個值會調(diào)用一次此方法,如果是批量插入也是每一條都要調(diào)用一次進行分片
log.info("DemoUserStandardStrategy_preciseShardingValue={}",preciseShardingValue);
Longsuffix=preciseShardingValue.getValue()%4;
log.info("suffix={}",suffix);
finalStringtargetDb=String.valueOf(Math.abs(suffix.intValue()));
StringshardingValue=collection.stream().filter(p->p.endsWith(targetDb)).findFirst().get();
log.info("preciseShardingValue={},shardingValue={}",preciseShardingValue,shardingValue);
returnshardingValue;
}

強制分片

<!--強制路由分片策略-->
<beanid="demoUserHintStrategy"class="shard.strategy.DemoUserHintStrategy"/>
<!--強制路由例子使用-->
<sharding:hint-strategyid="shardingDemoUserHintStrategy"algorithm-ref="demoUserHintStrategy"/>
DemoUserHintStrategy的Java如下,強制分片要實現(xiàn)HintShardingAlgorithm接口。
/**
*DemoUserHint強制路由分片策略,其實可以共用,只是例子
*@authoryulonggao
*@date2019/1/3114:35
*/
@Slf4j
publicclassDemoUserHintStrategyimplementsHintShardingAlgorithm{
@Override
publicCollection<String>doSharding(Collection<String>availableTargetNames,ShardingValueshardingValue){
//availableTargetNames這個參數(shù)是所有的dataSource的集合,shardingValue是HintManager傳過來的分片信息
log.info("DemoUserHintStrategy_availableTargetNames={}",availableTargetNames);
log.info("DemoUserHintStrategy_shardingValue={}",shardingValue);
ListShardingValuelistShardingValue=(ListShardingValue)shardingValue;
CollectionshardingValueList=listShardingValue.getValues();
//因為調(diào)用的時候分片是直接傳的DataSource的名稱,所以直接返回就可以了,如果傳其它值則要加業(yè)務(wù)邏輯進行分片篩選
//返回結(jié)果只能是availableTargetNames里邊所包含的
returnshardingValueList;
}
}

生成分部式ID的配置,生成主鍵的類要實現(xiàn)KeyGenerator接口。

<!—主鍵生成-->
<beanid="keyId"class="shard.key.DefaultKeyGenerator"/>

七、分布式事務(wù)

把下面這行代碼配置在spring里,shardingTransaction.xml 是jar包里邊帶的。

文件的源碼只有兩行配置:

<beanid="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource"ref="shardingDataSource"></property>
</bean>
<tx:annotation-driventransaction-manager="transactionManager"/>
<!--事務(wù)支持-->
<importresource="classpath:META-INF/shardingTransaction.xml"/>

使用注解配置事務(wù)要同時使用ShardingTransactionType和Transactional兩個注解。

/**
*注意:@ShardingTransactionType需要同Spring的@Transactional配套使用,事務(wù)才會生效。
*@paramparam
*@return
*/
@ShardingTransactionType(TransactionType.XA)
@Transactional(rollbackFor=Exception.class)
@Override
publicintaddParam(DemoParamparam){
log.info("addParam-param={}",param);
returndemoParamDao.addParam(param);
}
7.1 支持程度

完全支持非跨庫事務(wù),例如:僅分表或分庫但是路由的結(jié)果在單庫中。

完全支持因邏輯異常導(dǎo)致的跨庫事務(wù)。例如:同一事務(wù)中跨兩個庫更新,更新完畢后,拋出空指針,則兩個庫的內(nèi)容都能回滾。

支持?jǐn)?shù)據(jù)庫字段約束造成的回滾。

不支持因網(wǎng)絡(luò)、硬件異常導(dǎo)致的跨庫事務(wù)。例如:同一事務(wù)中跨兩個庫更新,更新完畢后、未提交之前,第一個庫死機,則只有第二個庫數(shù)據(jù)提交。

八、其他問題

關(guān)于order by 排序,如果排序的字段不在查詢結(jié)果中,生成的SQL也會被帶上,但結(jié)果不返回給你。

九、參考文檔

https://shardingsphere.apache.org/document/current/cn/manual/sharding-jdbc/usage/sharding/

作者:高玉瓏

來源: 宜信技術(shù)學(xué)院

網(wǎng)頁題目:Sharding-JDBC使用入門和基本配置
網(wǎng)站網(wǎng)址:http://aaarwkj.com/article10/chsjdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)站收錄、品牌網(wǎng)站設(shè)計、網(wǎng)站策劃、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
精品裸足人妻少妇二区三区| 国产成人激情自拍视频在线观看 | 最新亚洲av熟女播放| 天堂av在线资源观看| 午夜福利一区二区在线| 亚洲精品伦理中文字幕| 亚洲国产日韩精品自拍av| 欧美日韩精品一区二区视频永久免| 成年视频免费观看视频| 99热这里有精品久久| 青青草网站在线观看视频| 我的农村中年激情熟妇| 久久精品二区亚洲w码| 国产欧美日韩亚洲精品区| 精品成人18亚洲av播放| 亚洲精品在线观看日韩欧美| 国产精品亚洲二区三区| av天堂久久这里只有精品美国| 中文字幕免费日本在线| 亚洲国产精品区一区二区| 欧美日韩一区二区三区色| 麻豆一区二区人妻网站| 免费一区二区不卡去日本| 97在线观看全部视频| 天堂av在线播放观看| 开心五月六月婷婷在线| 麻豆久久av免费观看| 成人黄色大片免费看| 欧美一日韩一级片免费看| 日本经典三级视频在线观看| 日本岛国大片一区二区在线观看| 久久精品中文字幕有码日本道| 国产日韩欧美国产精品| 精品国产精品中文字幕| 国产精品亚洲二区三区| 日韩视频专区一区二区| 日本精品一区二区三区免费| 日本特黄高清免费大片| 免费又色又爽无遮挡网站| 91欧美在线激情视频| 肥臀大屁股av在线播放|