Cetus is middleware developed in C for the relational database MySQL, primarily offering comprehensive database access proxy functionality. Cetus is designed to be largely compatible with MySQL connections, allowing applications to access the database through Cetus with minimal changes, thus achieving horizontal scaling and high availability at the database layer.
For production environments, it is recommended to use the latest Release version.
Cetus is available in two versions: read-write splitting and sharding (where sharding is a specific form of database splitting).
For the read-write splitting version:
- Multi-process, lock-free design for improved efficiency
- Supports transparent backend connection pooling
- Supports SQL read-write splitting
- Enhanced SQL routing
- Supports prepared statements
- Supports result set compression
- Supports security management
- Supports status monitoring
- Supports TCP stream processing
- Supports domain name-based backend connections
- SSL/TLS support (client-side)
- Strong read consistency support (to be implemented)
For the database sharding version:
- Multi-process, lock-free design for improved efficiency
- Supports transparent backend connection pooling
- Supports SQL read-write splitting
- Supports data sharding
- Supports distributed transaction processing
- Supports bulk insert operations
- Supports conditional DISTINCT operations
- Enhanced SQL routing
- Supports result set compression
- Features a high-performance result set merging algorithm
- Supports security management
- Supports status monitoring
- Supports TCP stream processing
- Supports domain name-based backend connections
- SSL/TLS support (client-side)
- MGR support
- Strong read consistency support (to be implemented)
Cetus Architecture and Implementation
Explanation of MySQL XA Transaction Issues
- Cetus runs exclusively on Linux.
- Cetus cannot be compiled with MySQL 8.0 development.
- Cetus supports only
mysql_native_password
. - For non-Chinese users, please visit visit mysql-proxy.
Have a bug or a feature request? Please open a new issue. Before opening any issue, please search for existing issues.