最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Sharding-JDBC讀寫分離如何配置?主從數(shù)據(jù)庫實現(xiàn)詳解

 更新時間:2026年07月13日 08:56:23   作者:一恍過去  
想知道如何用Sharding-JDBC實現(xiàn)數(shù)據(jù)庫讀寫分離嗎?本文深入淺出地解析了主從架構的原理,教你通過一主多從配置將讀操作路由到從庫、寫操作路由到主庫,從而大幅提升系統(tǒng)查詢性能,還介紹了如何結合分庫分表,讓應用透明地使用集群,保證數(shù)據(jù)一致性

1、讀寫分離簡介

對于同一時刻有大量并發(fā)讀操作和較少寫操作類型的應用系統(tǒng)來說,將數(shù)據(jù)庫拆分為主庫和從庫,主庫負責處理事務性的增刪改操作,從庫負責處理查詢操作,能夠有效的避免由數(shù)據(jù)更新導致的行鎖,使得整個系統(tǒng)的查詢性能得到極大的改善。

通過一主多從的配置方式,可以將查詢請求均勻的分散到多個數(shù)據(jù)副本,能夠進一步的提升系統(tǒng)的處理能力。 使用多主多從的方式,不但能夠提升系統(tǒng)的吞吐量,還能夠提升系統(tǒng)的可用性,可以達到在任何一個數(shù)據(jù)庫宕機,甚至磁盤物理損壞的情況下仍然不影響系統(tǒng)的正常運行。

讀寫分離的數(shù)據(jù)節(jié)點中的數(shù)據(jù)內(nèi)容是一致的,而水平分片的每個數(shù)據(jù)節(jié)點的數(shù)據(jù)內(nèi)容卻并不相同。

將水平分片和讀寫分離聯(lián)合使用,能夠更加有效的提升系統(tǒng)的性能。

Sharding-JDBC讀寫分離則是根據(jù)SQL語義的分析,將讀操作和寫操作分別路由至主庫與從庫。

它提供透明化讀寫分離,讓使用方盡量像使用一個數(shù)據(jù)庫一樣使用主從數(shù)據(jù)庫集群。

Sharding-JDBC提供一主多從的讀寫分離配置,可獨立使用,也可配合分庫分表使用,同一線程且同一數(shù)據(jù)庫連接內(nèi),如有寫入操作,以后的讀操作均從主庫讀取,用于保證數(shù)據(jù)一致性。Sharding-JDBC不提供主從數(shù)據(jù)庫的數(shù)據(jù)同步功能,需要采用其他機制支持。

2、讀寫分離實現(xiàn)

模擬系統(tǒng)使用,讀寫分離

將數(shù)據(jù)庫分為:3306中的test 與 3307中的test

表名稱:user

1、SQL:

//創(chuàng)建數(shù)據(jù)表
CREATE TABLE `user` (
    `id` BIGINT(20) NOT NULL COMMENT 'Id',
    `name` VARCHAR(20) NOT NULL COMMENT '名稱',
    `phone` VARCHAR(20) NOT NULL COMMENT '電話',
    `email` VARCHAR(20) NOT NULL COMMENT '郵箱',
    PRIMARY KEY (`id`)
) 

2、properties配置:

#sharding-jdbc 水平分庫規(guī)則配置

# 數(shù)據(jù)源名稱,多數(shù)據(jù)源逗號隔開
spring.shardingsphere.datasource.names=ds0,ds1
# 配置第一個庫
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=123456
# 配置第二個庫
spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://127.0.0.1:3307/test?useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=123456

# 配置主從規(guī)則
# 指定主庫,ms為任意值,表主從同步別名
spring.shardingsphere.sharding.master-slave-rules.ms.master-data-source-name=ds0
# 指定從庫,ms為任意值,表主從同步別名
spring.shardingsphere.sharding.master-slave-rules.ms.slave-data-source-names=ds1

# 如果既有讀寫分離又有數(shù)據(jù)分片,則配置規(guī)則如下:
# actual-data-nodes節(jié)點后的數(shù)據(jù)源名稱要寫成,主從同步數(shù)據(jù)源的別名 : ms
# spring.shardingsphere.sharding.tables.user.actual-data-nodes = ms.t_user


## 打開sql輸出日志
spring.shardingsphere.props.sql.show=true

3、代碼實現(xiàn)

實體:

public class User implements Serializable {
    private Long id;

    private String name;

    private String phone;

    private String email;
    
    .....
}

Controller:

@RestController
@RequestMapping("test")
public class TestController {

    // TODO DEMO配置文件中,存在多種配置策略,如何只需要對某一種類型進行測試,則需要修改配置文件配置
    @Resource
    private TestService testService;


    @GetMapping("/read/write")
    public Object dataReadWrite() {
        return testService.dataReadWrite();
    }
}

Service:

@Service
public class TestService {

    @Resource
    private MasterSlaveMapper masterSlaveMapper;

    public Object dataReadWrite() {

        // 插入
        User user = new User();
        user.setId(1L);
        user.setName("Name");
        user.setPhone("phone");
        user.setEmail("email");
        masterSlaveMapper.insertMasterSlave(user);

        // 修改
        masterSlaveMapper.updateMasterSlaveById(1L, "修改名稱");
        // 刪除
        masterSlaveMapper.deleteMasterSlaveById(2L);

        // 查詢
        List<User> users = masterSlaveMapper.listAllMasterSlave();

        return users;
    }
}

Mapper

@Mapper
public interface MasterSlaveMapper {
    int insertMasterSlave(User user);

    int deleteMasterSlaveById(Long id);

    int updateMasterSlaveById(@Param("id") Long id, @Param("name") String name);

    List<User> listAllMasterSlave();
}

Mapping

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lhz.sharding.mapper.MasterSlaveMapper">
    <insert id="insertMasterSlave" parameterType="com.lhz.sharding.model.entity.User">
        insert into user(id, name, phone, email)
        values (#{id}, #{name}, #{phone}, #{email})
    </insert>

    <delete id="deleteMasterSlaveById">
        delete
        from user
        where id = #{id}
    </delete>

    <update id="updateMasterSlaveById">
        update
            user
        set `name` = #{name}
        where id = #{id}
    </update>

    <select id="listAllMasterSlave"
            resultType="com.lhz.sharding.model.entity.User">
        select *
        from user
        order by id desc
    </select>
</mapper>

4、效果:

根據(jù)properties的配置內(nèi)容,ds0對于3306端口的主庫,ds1對于3306端口的從庫,以下運行截圖可以看到,新增、修改、刪除操作的ds0(主庫),查詢操作的ds1(從庫),所以Sharding-JDBC會字段根據(jù)SQL語義自動區(qū)分是操作主庫還是從庫。

新增、修改、刪除:

查詢:

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java8新特性Stream流實例詳解

    Java8新特性Stream流實例詳解

    Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列。這篇文章主要介紹了Java8新特性Stream流的相關資料,需要的朋友參考下吧
    2017-10-10
  • JavaWeb項目音頻資源播放實現(xiàn)方法詳解

    JavaWeb項目音頻資源播放實現(xiàn)方法詳解

    這篇文章主要介紹了JavaWeb項目音頻資源播放實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java開發(fā)中常用記錄

    Java開發(fā)中常用記錄

    這篇文章主要介紹了Java-編程式事務、Java-Stream、Linux常用命令,需要的朋友可以參考下
    2023-05-05
  • spring實現(xiàn)靜態(tài)注入(類或者屬性)操作示例

    spring實現(xiàn)靜態(tài)注入(類或者屬性)操作示例

    這篇文章主要為大家介紹了spring實現(xiàn)靜態(tài)注入(類或者屬性)操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • SpringBoot整合Solr實現(xiàn)文檔檢索

    SpringBoot整合Solr實現(xiàn)文檔檢索

    Solr高度可靠、可擴展和容錯,提供分布式索引、復制和負載平衡查詢、自動故障轉(zhuǎn)移和恢復、集中配置等,Solr 為世界上許多最大的 Internet 站點的搜索和導航功能提供支持,本文將給大家介紹SpringBoot整合Solr實現(xiàn)文檔檢索,需要的朋友可以參考下
    2023-08-08
  • 基于Java編寫簡易的算式測試程序

    基于Java編寫簡易的算式測試程序

    本文將利用Java語言編寫一個簡易的算式測試程序,這個程序可以自動生成指定數(shù)量的加減乘三則運算題目,感興趣的小伙伴可以了解一下
    2022-05-05
  • 如何獲取MyBatis Plus執(zhí)行的完整的SQL語句

    如何獲取MyBatis Plus執(zhí)行的完整的SQL語句

    這篇文章主要介紹了如何獲取MyBatis Plus執(zhí)行的完整的SQL語句問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 連續(xù)調(diào)用多個外部系統(tǒng)寫接口保證數(shù)據(jù)一致性的思路

    連續(xù)調(diào)用多個外部系統(tǒng)寫接口保證數(shù)據(jù)一致性的思路

    今天小編就為大家分享一篇關于連續(xù)調(diào)用多個外部系統(tǒng)寫接口保證數(shù)據(jù)一致性的思路,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java實現(xiàn)Kafka生產(chǎn)者和消費者的示例

    Java實現(xiàn)Kafka生產(chǎn)者和消費者的示例

    這篇文章主要介紹了Java實現(xiàn)Kafka生產(chǎn)者和消費者的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Spring?JDBC?框架簡介

    Spring?JDBC?框架簡介

    Spring?JDBC?提供幾種方法和數(shù)據(jù)庫中相應的不同的類與接口。我將給出使用JdbcTemplate類框架的經(jīng)典和最受歡迎的方法。本文給大家介紹Spring?JDBC?框架的相關知識,感興趣的朋友一起看看吧
    2021-12-12

最新評論

庆城县| 安吉县| 察隅县| 怀化市| 历史| 崇义县| 和静县| 外汇| 中卫市| 南和县| 绥化市| 遂川县| 衡东县| 屏南县| 克什克腾旗| 鹤山市| 辉县市| 长岛县| 江都市| 马公市| 历史| 百色市| 汨罗市| 开原市| 陵水| 尼玛县| 繁昌县| 抚松县| 长寿区| 嘉定区| 赫章县| 徐汇区| 甘孜县| 克拉玛依市| 长乐市| 临汾市| 田阳县| 英吉沙县| 攀枝花市| 罗山县| 元阳县|