ShardingSphere
ShardingSphere 项目由当当捐入 Apache,并在京东数科逐渐发展壮大,成为业界首个 Apache 分布式数据库中间件项目(据说当初 Mycat 立志也是希望加入 Apache)。Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
ShardingSphere 定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。
优点:
1.可适用于任何基于java的ORM框架,如:JPA、Hibernate、Mybatis、Spring JDBC Template,或直接使用JDBC;
2.可基于任何第三方的数据库连接池,如:DBCP、C3P0、Durid等;
3.分片策略灵活,可支持等号、between、in等多维度分片,也可支持多分片键;
4.SQL解析功能完善,支持聚合、分组、排序、limit、or等查询,并支持Binding Table以及笛卡尔积表查询;
5.性能高,单库查询QPS为原生JDBC的99.8%,双库查询QPS比单库增加94%。
缺点:
1.理论上可支持任意实现JDBC规范的数据库。目前仅支持mysql;
2.维护会比较麻烦,需要逐个项目的修改配置。不能进行跨库连接,代码需要进行改造;
3.在扩展数据库服务器时需要考虑一致性哈希问题,或者采用分片键局部取模方式,也难免要进行部分的数据迁移。
不适用场景:
- 不适合 OLAP 的场景:虽然 Sharding-JDBC 也能做聚合分组查询,但大量的 OLAP 场景,仍然会比较慢,而且复杂的 SQL(如子查询等)目前还没有支持。这种查询不太适合大数据和高并发的互联网 online 数据库,建议使用合理的 OLTP 查询;
- 不适合事务强一致的要求:目前 Sharding-JDBC 的事务支持两种,一种是弱 XA,另一种是柔性事务(BASE)。因为 XA 的两阶段或三阶段提交其性能较低,因此互联网公司基本不会采用。而无论是弱 XA 还是柔性事务,都无法保证事务在任意时间段完全保证一致,其中柔性事务能保证数据的最终一致性,但达到最终一致性的时间仍然不可控。因此对于对跨库事务强一致要求很高的场景,需要从设计方面去考虑数据库 schema 的合理性;
- 对于 JTA 事务,目前 Shariding-JDBC 没有实现 JTA 的标准。而且由于在互联网场景下使用 JTA 比较少见,因此暂时不支持 JIA 事务。
网友评论