真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用Sharding-Jdbc怎么實(shí)現(xiàn)mysql分庫(kù)分表

本篇文章給大家分享的是有關(guān)使用Sharding-Jdbc怎么實(shí)現(xiàn)MySQL分庫(kù)分表,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、蒲江縣網(wǎng)站維護(hù)、網(wǎng)站推廣。

Sharding-Jdbc實(shí)現(xiàn)mysql分庫(kù)分表

簡(jiǎn)單介紹

數(shù)據(jù)庫(kù)分庫(kù)分表和讀寫分離區(qū)別,分庫(kù)分表是在多個(gè)庫(kù)建相同的表和同一個(gè)庫(kù)建不同的表,根據(jù)隨機(jī)或者哈希等方式查找實(shí)現(xiàn)。讀寫分離是為了解決數(shù)據(jù)庫(kù)的讀寫性能不足,使用主庫(kù)master進(jìn)行寫操作,從庫(kù)slave進(jìn)行讀操作,通過binglog實(shí)現(xiàn)主被庫(kù)數(shù)據(jù)的同步。 實(shí)現(xiàn)數(shù)據(jù)庫(kù)分庫(kù)分表可以自己實(shí)現(xiàn),也可以使用mycat和sharding-jdbc實(shí)現(xiàn)。

插播概念

(1)olap和oltp聯(lián)機(jī)事務(wù)處理OLTP(on-line transaction processing)、聯(lián)機(jī)分析處理OLAP(On-Line Analytical Processing)。OLTP是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的主要應(yīng)用,主要是基本的、日常的事務(wù)處理,例如銀行交易。OLAP是數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的主要應(yīng)用,支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供直觀易懂的查詢結(jié)果。
(2)分布式數(shù)據(jù)庫(kù)的自增ID不是自增的。分布式數(shù)據(jù)庫(kù)分頁查詢需要使用插入時(shí)間實(shí)現(xiàn)。
(3)explain命令,explain顯示了mysql如何使用索引來處理select語句以及連接表??梢詭椭x擇更好的索引和寫出更優(yōu)化的查詢語句。在select語句前面加上就可以。

Sharding-Jdbc介紹

sharding-jdbc是當(dāng)當(dāng)網(wǎng)開源的一款客戶端代理中間價(jià)。sharding-jdbc包含分庫(kù)分片和讀寫分離功能。對(duì)應(yīng)用的代碼沒有侵入型,幾乎沒有任何改動(dòng),兼容主流orm框架,主流數(shù)據(jù)庫(kù)連接池。目前屬于apache的孵化項(xiàng)目shardingSphere,發(fā)展迅猛。sharding-jdbc實(shí)現(xiàn)實(shí)現(xiàn)讀寫分離不能實(shí)現(xiàn)主從庫(kù)數(shù)據(jù)同步

Sharding-Jdbc使用(Spring boot)

(1)創(chuàng)建sharding-jdbc項(xiàng)目和數(shù)據(jù)庫(kù) ds_master_0,ds_master_1,ds_master_0_slave_0,ds_master_1_slave_0

create table order0
(
	id bigint(11) not null comment '主鍵ID' primary key,
	user_id  bigint(11) null comment '用戶ID',
	order_id bigint(11) null comment '訂單ID'
);
create table order1
(
	id bigint(11) not null comment '主鍵ID' primary key,
	user_id  bigint(11) null comment '用戶ID',
	order_id bigint(11) null comment '訂單ID'
);

(2)添加依賴

    
        io.shardingsphere
        sharding-jdbc-spring-boot-starter
        3.0.0
    

    
        com.alibaba
        druid-spring-boot-starter
        1.1.13
    
    
        mysql
        mysql-connector-java
        runtime
    
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        2.1.0
    

(3)配置文件

spring.application.name=sharding-jdbc

#mybatis
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

#當(dāng)注冊(cè)遇到相同名字是否允許被注冊(cè),在配置中心無效
spring.main.allow-bean-definition-overriding=true

#所有主從庫(kù)
sharding.jdbc.datasource.names=dsmaster0,dsmaster1,dsmaster0slave0,dsmaster1slave0

#dsmaster0
sharding.jdbc.datasource.dsmaster0.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.dsmaster0.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.dsmaster0.url=jdbc:mysql://ailijie.top:3306/ds_master_0?useSSL=false
sharding.jdbc.datasource.dsmaster0.username=root
sharding.jdbc.datasource.dsmaster0.password=

#slave for ds_master_0
sharding.jdbc.datasource.dsmaster0slave0.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.dsmaster0slave0.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.dsmaster0slave0.url=jdbc:mysql://ailijie.top:3306/ds_master_0_slave_0?useSSL=false
sharding.jdbc.datasource.dsmaster0slave0.username=root
sharding.jdbc.datasource.dsmaster0slave0.password=

#dsmaster1
sharding.jdbc.datasource.dsmaster1.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.dsmaster1.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.dsmaster1.url=jdbc:mysql://ailijie.top:3306/ds_master_1?useSSL=false
sharding.jdbc.datasource.dsmaster1.username=root
sharding.jdbc.datasource.dsmaster1.password=

#slave for ds_master_1
sharding.jdbc.datasource.dsmaster1slave0.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.dsmaster1slave0.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.dsmaster1slave0.url=jdbc:mysql://ailijie.top:3306/ds_master_1_slave_0?useSSL=false
sharding.jdbc.datasource.dsmaster1slave0.username=root
sharding.jdbc.datasource.dsmaster1slave0.password=

#分庫(kù)規(guī)則
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=dsmaster${user_id % 2}

#分表規(guī)則
sharding.jdbc.config.sharding.tables.order.actual-data-nodes=dsmaster${0..1}.order${0..1}
sharding.jdbc.config.sharding.tables.order.table-strategy.inline.shardingColumn=order_id
sharding.jdbc.config.sharding.tables.order.table-strategy.inline.algorithmExpression=order${order_id % 2}
#使用id作為分布式主鍵
sharding.jdbc.config.sharding.tables.order.key-generator-column-name=user_id

#邏輯主從庫(kù)名和實(shí)際主從庫(kù)映射關(guān)系
#sharding.jdbc.config.sharding.master-slave-rules.ds0.master-data-source-name=dsmaster0
#用逗號(hào)分隔
#sharding.jdbc.config.sharding.master-slave-rules.ds0.slave-data-source-names=dsmaster0
#sharding.jdbc.config.sharding.master-slave-rules.dsmaster1.masterDataSourceName=dsmaster1
#sharding.jdbc.config.sharding.master-slave-rules.dsmaster1.slaveDataSourceNames=dsmaster1slave0

(5)實(shí)體類 Order

[@Data](https://my.oschina.net/difrik)
[@Builder](https://my.oschina.net/u/1245189)
@NoArgsConstructor
@AllArgsConstructor
public class Order implements Serializable {
	private static final long serialVersionUID = 427226138907372838L;
	private Long id;

	private Integer userId;
	private Integer orderId;
}

(4)controller外部接口

[@Slf4j](https://my.oschina.net/slf4j)
@RequestMapping("sharding")
@RestController
public class ShardingController {

   @Autowired
   private OrderMapper orderMapper;

   @RequestMapping
   public String helloShardin(){
      return "hello Sharding-jdbc";
   }

   @RequestMapping("insert")
   public void insert(@RequestParam Integer orderId, @RequestParam Integer userId) {
      Order order = Order.builder()
            .orderId(orderId).userId(userId).build();
      orderMapper.insert(order);
      Long id = order.getId();
      log.info("Generated Key--id:" + id);
   }

   @RequestMapping("queryAll")
   public void findAll() {
       List orders = orderMapper.queryAll();
       log.info("user:{}", orders);
       log.info("user:{}",orders.size());
   }

   @RequestMapping("getById")
   public void getById(@RequestParam Long id) {
      Order order = orderMapper.queryById(id);
      log.info("user:{}", order);
   }

   @RequestMapping("getByUserId")
   public void getByUserId(@RequestParam Long userId) {
      List orders = orderMapper.queryByUserId(userId);
      log.info("user:{}", orders);
   }

   @RequestMapping("deleteById")
   public void deleteById(@RequestParam Long id) {
        orderMapper.deleteById(id);
        log.info("user:{}", id);
   }
}

以上就是使用Sharding-Jdbc怎么實(shí)現(xiàn)mysql分庫(kù)分表,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文標(biāo)題:使用Sharding-Jdbc怎么實(shí)現(xiàn)mysql分庫(kù)分表
網(wǎng)站路徑:http://weahome.cn/article/ggjods.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部