国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Sharding-Jdbc實現mysql分庫分表

go4it / 1756人閱讀

摘要:實現數據庫分庫分表可以自己實現,也可以使用和實現。分布式數據庫的自增不是自增的。分布式數據庫分頁查詢需要使用插入時間實現。包含分庫分片和讀寫分離功能。

Sharding-Jdbc實現mysql分庫分表 簡單介紹

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

插播概念

(1)olap和oltp聯機事務處理OLTP(on-line transaction processing)、聯機分析處理OLAP(On-Line Analytical Processing)。OLTP是傳統的關系型數據庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。OLAP是數據倉庫系統的主要應用,支持復雜的分析操作,側重決策支持,并且提供直觀易懂的查詢結果。
(2)分布式數據庫的自增ID不是自增的。分布式數據庫分頁查詢需要使用插入時間實現。
(3)explain命令,explain顯示了mysql如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。在select語句前面加上就可以。

Sharding-Jdbc介紹

sharding-jdbc是當當網開源的一款客戶端代理中間價。sharding-jdbc包含分庫分片和讀寫分離功能。對應用的代碼沒有侵入型,幾乎沒有任何改動,兼容主流orm框架,主流數據庫連接池。目前屬于apache的孵化項目shardingSphere,發展迅猛。sharding-jdbc實現實現讀寫分離不能實現主從庫數據同步

Sharding-Jdbc使用(Spring boot)

(1)創建sharding-jdbc項目和數據庫 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

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

#所有主從庫
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=

#分庫規則
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}

#分表規則
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

#邏輯主從庫名和實際主從庫映射關系
#sharding.jdbc.config.sharding.master-slave-rules.ds0.master-data-source-name=dsmaster0
#用逗號分隔
#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)實體類 Order

@Data
@Builder
@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
@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沒有侵入性,不會影響業務代碼。
可以使用Springboot的配置文件規范進行配置。

有問題,請留言!

個人博客地址 歡迎訪問

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75650.html

相關文章

  • springboot實踐筆記之一:springboot+sharding-jdbc+mybatis全

    摘要:現在的分片策略是上海深圳分別建庫,每個庫都存各自交易所的兩支股票的,且按照月分表。五配置分片策略數據庫分片策略在這個實例中,數據庫的分庫就是根據上海和深圳來分的,在中是單鍵分片。 由于當當發布了最新的Sharding-Sphere,所以本文已經過時,不日將推出新的版本 項目中遇到了分庫分表的問題,找到了shrding-jdbc,于是就搞了一個springboot+sharding-jd...

    Snailclimb 評論0 收藏0
  • database

    摘要:它是第一個把數據分布在全球范圍內的系統,并且支持外部一致性的分布式事務。目的是使得開發者閱讀之后,能對項目有一個初步了解,更好的參與進入的開發中。深度探索數據庫并發控制技術并發控制技術是數據庫事務處理的核心技術。 存儲過程高級篇 講解了一些存儲過程的高級特性,包括 cursor、schema、控制語句、事務等。 數據庫索引與事務管理 本篇文章為對數據庫知識的查缺補漏,從索引,事務管理,...

    csRyan 評論0 收藏0
  • Spring Boot中整合Sharding-JDBC讀寫分離示例

    摘要:今天就給大家介紹下方式的使用,主要講解讀寫分離的配置,其余的后面再介紹。主要還是用提供的,配置如下配置內容如下主數據源從數據源讀寫分離配置查詢時的負載均衡算法,目前有種算法,輪詢和隨機,算法接口是。 在我《Spring Cloud微服務-全棧技術與案例解析》書中,第18章節分庫分表解決方案里有對Sharding-JDBC的使用進行詳細的講解。 之前是通過XML方式來配置數據源,讀寫分離...

    kbyyd24 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<