ShardingSphere-JDBC

一、ShardingSphere-JDBC簡介

ShardingSphere-JDBC是Apache ShardingSphere的其中一個分布式數據庫中間件產品,它提供了Java編程語言訪問關係型數據庫和非關係型數據庫的高性能、可擴展性、易管理性、可靠性的解決方案。

ShardingSphere-JDBC支持Sharding、Masterslave和Encrypt三種數據庫中間件的治理功能,同時還提供了分布式數據訪問的解決方案,例如數據分片、分布式事務等等。

ShardingSphere-JDBC具有以下特點:

  • 高性能:增強了JDBC驅動性能,並支持多數據庫負載均衡,數據分片負載均衡等高級負載均衡策略。
  • 易用性:不依賴任何框架,基於JDBC標準進行開發,無需學習和重新編寫SQL。
  • 高可擴展性:支持流行的數據庫和中間件,並具有良好的擴展性,可應用於多種應用場景。同時支持橫向擴展和縱向擴展。
  • 高可靠性:在分布式出現故障時,ShardingSphere提供了可靠的容錯和恢復機制,使應用程序可以持續運行。
  • 支持多種技術:支持多種技術,包括MySQL、Oracle、SQL Server、PostgreSQL、H2、MongoDB、Redis等。

二、ShardingSphere-JDBC的使用

1. 添加依賴

通過添加ShardingSphere-JDBC的 Maven 依賴來使用它,需要在pom.xml文件中添加以下依賴:

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-core</artifactId>
    <version>5.0.0-alpha</version>
</dependency>

2. 配置數據源

在配置文件中配置數據源相關信息:

# 數據庫配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/demo_ds?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root

# ShardingSphere配置
spring.shardingsphere.datasource.names=ds0,ds1
 
# ds0配置
spring.shardingsphere.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.url=jdbc:mysql://localhost:3306/demo_ds_0?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=root
 
# ds1配置
spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://localhost:3306/demo_ds_1?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=root

# 表規則配置
spring.shardingsphere.sharding.tables.student.actual-data-nodes=ds0.student,ds1.student

# db分片算法配置
spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{id % 2}

# table分片算法配置
spring.shardingsphere.sharding.tables.student.database-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.student.database-strategy.inline.algorithm-expression=ds$->{id % 2}

3. 代碼示例

下面是一個查詢示例:

String sql = "SELECT * FROM student WHERE id=?";
 
try (Connection conn = dataSource.getConnection();
     PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
    preparedStatement.setInt(1, 1);
    try (ResultSet rs = preparedStatement.executeQuery()) {
        while (rs.next()) {
            System.out.println(rs.getLong(1));
        }
    }
}

三、ShardingSphere-JDBC的可擴展性

1. 開發自定義的分片算法

ShardingSphere-JDBC提供了很好的可擴展性,允許開發人員擴展自定義的算法和規則,以滿足特殊場景下的需求。

比如,我們可以開發自己的分片算法:

public class MyShardingAlgorithm implements PreciseShardingAlgorithm {

    @Override
    public String doSharding(Collection availableTargetNames, PreciseShardingValue shardingValue) {
        for (String each : availableTargetNames) {
            if (each.endsWith(shardingValue.getValue() % 2 + "")) {
                return each;
            }
        }
        throw new IllegalArgumentException();
    }
}

2. 開發自定義的數據源擴展

ShardingSphere-JDBC的另一個可擴展性是,可以使用自定義的數據源擴展,例如Mybatis、Hibernate等。

我們可以在Spring Boot中配置Mybatis和ShardingSphere-JDBC:

# Mybatis配置
mybatis.mapper-locations=classpath*:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.entity
 
# ShardingSphere配置
spring.shardingsphere.datasource.names=ds0,ds1
 
# ds0配置
spring.shardingsphere.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.url=jdbc:mysql://localhost:3306/demo_ds_0?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=root
 
# ds1配置
spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://localhost:3306/demo_ds_1?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=root

# 表規則配置
spring.shardingsphere.sharding.tables.student.actual-data-nodes=ds0.student,ds1.student

# db分片算法配置
spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{id % 2}

# table分片算法配置
spring.shardingsphere.sharding.tables.student.database-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.student.database-strategy.inline.algorithm-expression=ds$->{id % 2}

# Mybatis配置
mybatis.mapper-locations=classpath*:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.entity

3. 開發自定義的數據源類型

ShardingSphere-JDBC還允許開發自定義的數據源類型,以支持不同類型的數據庫或中間件。

以下是一個自定義的數據源類型的示例:

public class MyDataSource extends AbstractDataSourceAdapter {
 
    public MyDataSource() {
        super(createDataSourceMap());
    }
    
    //創建Mybatis-SQLite數據源
    private static Map<String, DataSource> createDataSourceMap() {
        Map<String, DataSource> result = new HashMap<>();
        result.put("ds0", createSQLiteDataSource());
        return result;
    }
    
    //創建SQLite數據源
    public static DataSource createSQLiteDataSource() {
        SQLiteDataSource result = new SQLiteDataSource();
        result.setUrl("jdbc:sqlite::memory:");
        return result;
    }
}

四、ShardingSphere-JDBC的應用場景

ShardingSphere-JDBC適用於以下場景:

  • 分布式應用:在多台機器上運行相同應用程序時,可以使用ShardingSphere-JDBC提供的分片策略,將業務數據分布在多個節點上,使應用程序可以進行橫向擴展和負載均衡。
  • 高性能應用:使用ShardingSphere-JDBC可以達到高並發、低延遲的目標,ShardingSphere-JDBC提供了多數據源負載均衡、分布式事務等高級負載均衡策略,可以支持高性能的應用程序。
  • 多租戶系統:使用ShardingSphere-JDBC可以將業務數據按照租戶ID進行分片,實現多租戶系統,並能夠支持橫向擴展和負載均衡。

五、總結

ShardingSphere-JDBC是一個非常強大的分布式數據庫中間件,它提供了高性能、易用性、高可擴展性、高可靠性的解決方案。同時,它還為開發人員提供了很好的可擴展性,以便於滿足特殊場景下的需求。使用ShardingSphere-JDBC可以讓我們快速地構建出高性能、可擴展的應用程序。

原創文章,作者:ULXIC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/368248.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ULXIC的頭像ULXIC
上一篇 2025-04-12 01:13
下一篇 2025-04-12 01:13

相關推薦

  • MySQL JDBC驅動包下載詳解

    一、JDBC驅動介紹 JDBC是Java Database Connectivity的縮寫,它是Java應用程序與各種數據庫連接的標準API,允許Java程序員使用JDBC API…

    編程 2025-04-25
  • Apache ShardingSphere詳解

    Apache ShardingSphere是一款開源的分布式數據庫中間件,致力於為用戶提供一站式的數據治理解決方案。通過ShardingSphere,可以方便地實現數據分片、讀寫分…

    編程 2025-04-24
  • 詳細闡述jdbc:mysql://localhost:3306

    一、連接MySQL數據庫 連接MySQL數據庫的方式有多種,其中使用JDBC連接是一種常用的方式。在JDBC連接中,我們需要使用mysql-connector-java包,並調用相…

    編程 2025-04-23
  • JDBC Jar包下載

    JDBC(Java Database Connectivity)是Java語言操作數據庫的標準API,使得Java程序員可以和各種各樣的關係型數據庫進行通信。JDBC與特定數據庫的…

    編程 2025-01-27
  • Maven JDBC詳解

    一、什麼是Maven Maven是一款基於項目對象模型(POM)概念的Java項目管理工具,可以提供項目構建、依賴管理等常用開發功能。 二、Maven JDBC介紹 Maven J…

    編程 2025-01-07
  • JDBC入門指南

    一、JDBC概述 JDBC(Java Database Connectivity)即Java數據庫連接,是Java語言中的一套數據庫訪問API,可以讓Java應用程序通過SQL語句…

    編程 2025-01-01
  • mysql數據庫jdbc了解,oracle mysql jdbc

    本文目錄一覽: 1、Java裡面的JDBC是什麼意思啊? 2、怎樣用jdbc連接mysql數據庫 3、jdbc 連接mysql時中的URL怎麼寫的 4、怎樣使用jdbc訪問mysq…

    編程 2024-12-31
  • jdbc.properties詳解

    一、jdbc.properties在哪裡 jdbc.properties是一個配置文件,用於配置Java數據庫連接(JDBC)應用程序。一般情況下,jdbc.properties文…

    編程 2024-12-30
  • JDBC驅動包使用指南

    在Java編程中,連接數據庫是必不可少的一步。Java數據庫連接(Java Database Connectivity,簡稱JDBC)是一種Java程序接口,用於通過標準規範為各種…

    編程 2024-12-26
  • 下載MySQL JDBC驅動包

    MySQL是一個流行的開源數據庫,JDBC(Java Database Connectivity)是一種Java API可用於將Java應用程序連接到各種關係數據庫。下載MySQL…

    編程 2024-12-26

發表回復

登錄後才能評論