RDBMS(Sql)
关系型数据库是将复杂的数据结构以行和列的形式进行存储及展示,如Excel中的数据形式。在关系型数据中,对数据的操作几乎都是建立在一个或多个关系表的基础上。通过表的关系来实现数据库的管理。典型的关系型数据库有 Oracle、MySql、SQL Server等。
NoSql
NoSQL,指的是非关系型的数据库。NoSQL用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。常见的有Redis、Hbase、MongoDB等
NewSql
NewSQL目标是将SQL的ACID保证与NoSQL的可扩展性和高性能相结合。可以简单地把NewSQL理解为:在NoSQL基础上,加入了事务能力。从实现上来说,主要是SQL+事务+分布式系统。NewSQL的相关产品有TiDB,OceanBase等。
RDBMS特点:
高度组织化结构化数据
结构化查询语言(SQL)
数据和关系都存储在单独的表中
数据操纵语言,数据定义语言
遵循ACID特性
:A (Atomicity) 原子性)、C (Consistency) 一致性、I (Isolation) 独立性、D (Durability) 持久性。
NoSql特点:
没有声明性查询语言
没有预定义的模式
键 - 值对存储,列存储,文档存储,图形数据库
最终一致性,而非ACID属性
非结构化和不可预知的数据
CAP定理
高性能,高可用性和可伸缩性
NewSql:
基于内存的存储引擎
基于数据分区的水平扩展性
基于MVCC的分布式事务
强一致的数据复制(多副本)
自动容灾高可用
并发性比较高,可能达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈;
每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率非常低。
数据库横向扩展比较困难,当用户量和访问量与日俱增的时候,数据库没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展代价较大,往往需要停机维护和数据迁移。
传统关系型数据库通常有2种解决方法:
升级服务器硬件:虽然提升了性能,但有天花板。
数据分片,使用分布式集群结构:对单点数据库进行数据分片,存放到分布式集群里。可扩展性更好,但也带来了新的问题,以前在一个库里的数据,现在跨了多个库,应用系统不能自己去多个库中操作,需要使用数据库分片中间件。分片中间件做简单的数据操作时还好,但涉及到跨库join、跨库事务时就较难处理,因此很多人在业务层处理,复杂度较高。
Nosql放弃了传统SQL的强事务保证和关系模型,重点放在数据库的高可用性和可扩展性。
noSQL 的主要优势:
高可用性和可扩展性,自动分区,轻松扩展
不保证强一致性,性能大幅提升
没有关系模型的限制,极其灵活
noSQL不保证强一致性,对于普通应用没问题,但金融行业的应用一般都有强一致性的需求。
noSQL不支持SQL语句,兼容性较差,不同的noSQL数据库都有自己的 api 操作数据,比较复杂。
newSQL 提供了与 noSQL 相同的可扩展性,而且仍基于关系模型,还保留了极其成熟的 SQL 作为查询语言,保证了ACID事务特性。
关于各种数据库的应用场景:
不需要要事务:
数据量不大:MongoDB
数据量大:HBase
需要事务:
数据量不大,接受分库分表:Mysql
数据量大/当前数据量不大但增长速度高:OceanBase,TiDB
CAP定理(CAP theorem)
在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。