互联网领域数据库面临的问题
我们在互联网领域数据库面临的问题主要有高可用、存储稳定性要求高、并发访问频繁和数据海量。
各种数据库方案对比
RDBMS解决方案的优缺点
优点
开发友好,面向SQL。存储引擎稳定,单节点事务引擎成熟。未达阀值的单机性能高。
缺点
单节点并发访问频率受限,单节点数据承载量受限,分布式事务性能难以接受,分布式扩展困难。
当当数据库中间层的关注重点
当当数据库中间层的关注重点主要在于分片,分片包含了分库分表、读写分离和分布式主键这三点。
事务目前并没有做到特别完善和成熟,只支持弱XA和柔性事务。弱XA就是如果网络节点不发生问题,这个事务可以正常提交回滚。但是一旦在多个数据库之间网络闪断,这时事务的一致性可能会受到破坏。它会用柔性事务的方案来做补偿,到达最终事务的一致性。
还有治理的功能,包括配置动态化和数据源自动切换。
Sharding-JDBC
Sharding-JDBC是当当网研发的开源分布式数据库框架,定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。
Sharding-JDBC的核心功能为数据分片和读写分离,通过Sharding-JDBC应用可以透明的使用jdbc访问已经分库分表,读写分离的多个数据源,而不用关心数据源的数量以及数据如何分表。
分片类型
分片类型有垂直分片和水平分片两种。垂直分片根据业务进行拆分,而水平拆分是利用把数据完全打散的方式去做,和业务完全没有关系。
- 垂直分表:可以把一个宽表的字段按访问频次,是否大字段的原则拆分为多个表,这样既可以使业务清晰,还可以提升部分性能。拆分后,尽量从业务角度避免联合查询,否则性能将得不偿失。
- 垂直分库