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
- Massive Data Storage: Automatic table sharding when single table data exceeds 10 million records
- High Concurrency Access: Distributed database access pressure through database sharding
- Read-Write Separation: Implement read/write traffic separation with master-slave architecture
- 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:
- StandardShardingStrategyConfiguration (standard sharding)
- InlineShardingStrategyConfiguration (inline expression)
- ComplexShardingStrategyConfiguration (complex sharding)
- HintShardingStrategyConfiguration (hint sharding)
- NoneShardingStrategyConfiguration (no sharding)
Initialization Process
- Configuration Parsing Phase: Read external configuration files, validate configuration parameters
- Configuration Object Generation: Map parsed configuration to in-memory Configuration object
- Rule Conversion Phase: Convert through Factory mechanism
- DataSource Packaging Phase: Create actual physical DataSource connection pool
- Runtime Preparation Phase: Initialize SQL parsing engine, load sharding algorithm implementation classes
- 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