数据库发展至今已经有3代了:
- SQL,传统关系型数据库,例如 MySQL
- noSQL,例如 MongoDB, Cassandra
- newSQL,例如Aurora, HyperScale
Sql
传统关系型数据库的索引一般为B+树,读取数据速度很快,但对比NoSql写入速度比较慢.
Sql优势在于支持事务,隔离级别,锁等但是随着数据量的越来越大,sql面临许多效率瓶颈, 比如过于强大的sql语句功能效率过慢. 数据量大的时候需要分库分表,但是分库分表又很难支持事务,join和排序等功能.
NoSql
后来 noSQL 出现了,放弃了传统SQL的强事务保证和关系模型,重点放在数据库的高可用性和可扩展性。
noSQL 的主要优势:
- 高可用性和可扩展性,自动分区,轻松扩展
- 不保证强一致性,性能大幅提升
- 没有关系模型的限制,极其灵活
noSQL 问题在于不保证强一致性,不支持 SQL 语句,没有强大的事务等. 但NoSql索引一般基于分层级的LSM树,相较于Sql来说牺牲了读的速度但写的速度大大提高了.
NewSql
newSQL 提供了与 noSQL 相同的可扩展性,而且仍基于关系模型,还保留了极其成熟的 SQL 作为查询语言,保证了ACID事务特性。
简单来讲,newSQL 就是在传统关系型数据库上集成了 noSQL 强大的可扩展性。
newSQL 的主要特性:
- SQL 支持,支持复杂查询和大数据分析。
- 支持 ACID 事务,支持隔离级别。
- 弹性伸缩,扩容缩容对于业务层完全透明。
- 高可用,自动容灾, 分布式
newSql主要是对sql做了一些底层分离, 如存储和计算层的分离, 计算写入存储时直接写log, log is database,存储层自己拿log做存储,伸缩扩展,并行,异步等等优化.
还有log和data也可以做一层decoupled分离.
读写也可以彻底分离, 扩展性能更强了.