sql、nosql、newsql关系

588 阅读3分钟

一:概念

  SQL(Structured Query Language):数据库,指关系型数据库。主要代表:SQL Server、Oracle、MySQL、PostgreSQL。

  NoSQL(Not Only SQL):泛指非关系型数据库。主要代表:MongoDB、Redis、CouchDB。

  NewSQL: 对各种新的可扩展/高性能数据库的简称。主要代表:Clustrix、GenieDB、TiDB。

二:对比

  SQL:

好处来源于它的统一性和易用性,缺点是面对大量的数据时,他的性能会随着数据库的增大而急剧下降。

NoSQL:

以放宽ACID原则为代价,NoSQL采取的是最终一致性原则,而不是像关系型数据库那样地严格遵守着ACID的原则,这意味着如果在特定时间段内没有特定数据项的更新,则最终对其所有的访问都将返回最后更新的值。 这就是这样的系统通常被描述为提供基本保证的原因(基本可用,软状态,最终一致性) — 而不是ACID。

NewSQL:

NewSQL选择汲取了SQL和NewSQL的优点,希望将ACID和可扩展性以及高性能结合,但是目前而言,不适用于所有的场景。

三:Let's think

  根据CAP原则,

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance(分区容错)

  这三点不能够同时做到,所以我们可以猜想,未来的很多年里,是不会有这样一个能够满足所有场景的数据库存在,现在主流的关系型数据库+NoSQL的组合是一种解决方案,不断涌现出来的NewSQL也能够满足一定场景中的业务需求。 数据库发展至今已经有3代了:

  1. SQL,传统关系型数据库,例如 MySQL
  2. noSQL,例如 MongoDB, Cassandra
  3. 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分离. 

读写也可以彻底分离, 扩展性能更强了.