Overview

Sharding-JDBC is a lightweight Java database middleware positioned as a database sharding solution. It works at the JDBC layer and provides transparent database sharding services for applications. Unlike traditional database middleware, Sharding-JDBC uses a client-side direct connection architecture, delivered as a JAR package without requiring additional proxy server deployment. It can be understood as an enhanced JDBC driver.

Core Features

Non-Invasive Architecture

  • Pure Java Implementation: Fully based on JDBC specifications, no modification to database protocols
  • Zero Deployment Dependency: Just include the JAR package, no additional middleware deployment required
  • Transparent Sharding: Completely transparent to business code, applications don’t need to be aware of sharding logic

Compatibility Support

ORM Framework Compatibility

  • Full ORM Support:
    • JPA/Hibernate: Automatic EntityManager mapping
    • MyBatis/MyBatis-Plus: Seamless Mapper interface integration
    • Spring JDBC: Perfect JdbcTemplate operation support
    • Native JDBC: Standard API usage

Connection Pool Compatibility

  • Mainstream Connection Pools:
    • Traditional: DBCP, C3P0, BoneCP
    • High-Performance: Druid, HikariCP

Database Support

  • Multi-Database Adaptation: MySQL, Oracle, SQLServer, PostgreSQL, etc.

Use Cases

  1. Massive Data Storage: Automatic table sharding when single table data exceeds 10 million records
  2. High Concurrency Access: Distributed database access pressure through database sharding
  3. Read-Write Separation: Implement read/write traffic separation with master-slave architecture
  4. Distributed Transactions: Support cross-shard transaction management

Technical Implementation

  • SQL Parsing Engine: Based on Antlr for SQL syntax parsing
  • Routing Engine: Supports precise, range, complex and other sharding strategies
  • Execution Engine: Parallel execution of cross-database queries
  • Result Merging: Supports memory merging, streaming merging and other result processing methods

Core Entry APIs

ShardingDataSourceFactory

This is the core factory class for database sharding scenarios, with main features:

  • Support horizontal database sharding (split by database dimension)
  • Support horizontal table sharding (split by table dimension)
  • Built-in read-write separation functionality
  • Typical use case: E-commerce order table sharding by user ID

MasterSlaveDataSourceFactory

This is the dedicated factory class for read-write separation:

  • Support one-master-multi-slave architecture
  • Automatically route write operations to master, read operations to slave
  • Typical use case: Transaction system read-write separation

Configuration System

ShardingRuleConfiguration

As the root object of the configuration system, it can contain 0 to N TableRuleConfiguration and 0 to 1 MasterSlaveRuleConfiguration.

TableRuleConfiguration

Supports 5 sharding strategy configurations:

  1. StandardShardingStrategyConfiguration (standard sharding)
  2. InlineShardingStrategyConfiguration (inline expression)
  3. ComplexShardingStrategyConfiguration (complex sharding)
  4. HintShardingStrategyConfiguration (hint sharding)
  5. NoneShardingStrategyConfiguration (no sharding)

Initialization Process

  1. Configuration Parsing Phase: Read external configuration files, validate configuration parameters
  2. Configuration Object Generation: Map parsed configuration to in-memory Configuration object
  3. Rule Conversion Phase: Convert through Factory mechanism
  4. DataSource Packaging Phase: Create actual physical DataSource connection pool
  5. Runtime Preparation Phase: Initialize SQL parsing engine, load sharding algorithm implementation classes
  6. Operation Execution Phase: Execute SQL through packaged DataSource

Usage Example

Add Dependency

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-core</artifactId>
    <version>${latest.release.version}</version>
</dependency>

Complete Example Code

// 1. Configure actual data sources
Map<String, DataSource> dataSourceMap = new HashMap<>();
dataSourceMap.put("ds0", createDataSource("ds0"));
dataSourceMap.put("ds1", createDataSource("ds1"));

// 2. Configure sharding rules
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());

// 3. Create data source
Properties props = new Properties();
props.setProperty("sql.show", "true");
DataSource dataSource = ShardingDataSourceFactory.createDataSource(
    dataSourceMap,
    shardingRuleConfig,
    props
);

Main Functions

Data Sharding:

  • Database sharding, table sharding
  • Read-write separation
  • Sharding strategies
  • Distributed primary keys

Distributed Transactions:

  • Standardized transaction interfaces
  • XA strong consistency transactions
  • Flexible transactions

Database Governance:

  • Dynamic configuration
  • Orchestration and governance
  • Data masking
  • Visual tracing