当前数据库分为关系型数据库与非关系型数据库
关系型数据库:指采用了关系模型来组织数据的数据库
非关系型数据库:指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统
仅仅作为关系型数据库的补充,定位为补充
应对基于海量用户和海量数据前提下的数据处理问题
数据库排名查询:
网站地址:https://db-engines.com/en/ranking
一,关系型数据库
关系型数据库:指采用了关系模型来组织数据的数据库
十大主流关系型数据库:Oracle, Microsoft SQL Server, MySQL, PostgreSQL, DB2, Microsoft Access, SQLite, Teradata, MariaDB, SAP
SQL 优点:
1. 简单易理解:二维表结构贴近逻辑世界,关系模型相对于网状,层次等其他模型更容易理解
2.方便易用: 通用的SQL 语言是操作 SQL 非常方便
3.维护简单: 丰富的完整性,大大减低了数据冗余和数据不一致的概率
4.数据安全: 不会容易丢失
SQL 缺点:
1.性能瓶颈:硬盘I/O性能低下 的局限性性限制了并发的数量,SQL无法解决高并发的情况
2.效率较低,SQL的表互相连接,一张表包含海量数据,经过SQL 层查询数据十分缓慢,效率非常低
3.扩展瓶颈: 基于Web的结构中,SQL最难进行横向扩展,当用户量于访问量过多后,SQL 无法像 web server 和 app server一样简单通过添加更多硬件和服务节点来扩展负载能力,需要对SQL 升级扩展时,需要停机升级
4.性能欠佳: 为保证ACID特性,SQL 中所有表都是存储一个格式化的数据结构,多表的关联查询 以及 复杂的数据分析类 型的复杂SQL 报表查询将会导致性能欠佳
二,非关系型数据库
非关系型数据库:指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统
NoSQL数据库原本就不支持Join处理,各个数据都是独立设计的,很容易把数据分散在多个服务器上,故减少了每个服务器 上的数据量,即使要处理大量数据的写入,也变得更加容易,数据的读入操作当然也同样容易。
NoSQL 结构
NoSQL 以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己 的键值对,不限于固定的结构,可以减少时间和空间的开销
NoSQL 优点:
可扩展,可伸缩, 大数据量下的高性能 灵活的数据模型 高可用性
1.可以按需添加信息,仅仅需要根据 id 取出相应 value 就可以完成查询
2.适用于 SNS (Social Networking Services),NoSQL 严格上不是一中数据库,而是一种数据结构化存储方法的集合
NoSQL 缺点:
只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,SQL 更加合适,不适合持久化存储海量数据
分类:
1.面向高性能并发读写的key - value 数据库
key - value 存储格式:具有极高的并发读写性能
类似于Java 中的 map ,可以将整个数据库理解为一个大的 map ,每个键都会对应一个唯一的值
eg:Redis, Amazon DynamoDB, Memcached, Microsoft Azure Cosmos DB, Hazelcast
根据数据保存方式分类:
1.临时性
所谓临时性就是数据有可能丢失,memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当 memcached停止时,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据,旧数据会丢 失。总结来说:
1、在内存中保存数据
2、可以进行非常快速的保存和读取处理
3、数据有可能丢失
2. 永久性
所谓永久性就是数据不会丢失,这里的键值存储是把数据保存在硬盘上,与临时性比起来,由于必然要发生对硬 盘的IO操作,所以性能上还是有差距的,但数据不会丢失是它最大的优势。总结来说:
1、在硬盘上保存数据
2、可以进行非常快速的保存和读取处理(但无法与memcached相比)
3、数据不会丢失
3. 两者兼备
Redis属于这种类型。Redis有些特殊,临时性和永久性兼具。Redis首先把数据保存在内存中,在满足特定条件 ( 默认是 15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的键发生变更)的时候将数据写入到硬盘 中,这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性,这种类型的数据库特别适 合处理数组类型的数据。总结来说:
1、同时在内存和硬盘上保存数据
2、可以进行非常快速的保存和读取处理
3、保存在硬盘上的数据不会消失(可以恢复)
4、适合于处理数组类型的数据
2.面向海量数据访问的面向文档 数据库
文档类型 存储格式: 在海量的数据中可以快速的查询数据
使用内部表示法,可以直接在应用程序中处理,主要是 JSON
JSON 文档也可以作为纯文本存储在键值存储或关系数据库系统中
eg:MongoDB, Amazon DynamoDB, Couchbase, Microsoft Azure Cosmos DB , Couch DB
不定义表结构
即使不定义表结构,也可以像定义了表结构一样使用,还省去了变更表结构的麻烦。
可以使用复杂的查询条件
跟键值存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据,虽然不具备事务处理和Join这些关系型数 据库所具有的处理能力,但初次以外的其他处理基本上都能实现
3.面向搜索数据内容的搜索引擎
搜索引擎是专门用于搜索数据内容的NoSQL数据库管理系统
主要用于对海量数据进行实时的处理和分析处理,可以用于机器学习和数据挖掘
eg: Elasticsearch, Splunk, Solr, MarkLogic, Sphinx
4.面向可扩展性的分布式数据库
特点: 具有很强的扩展性
面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据
数据库可以适应数据量的增加以及数据结构的变化,将数据存储在记录中,能够容纳大量动态列
eg:Cassandra, Hbase, Microsoft Azure Cosmos DB, Datastax EnterPrise , Accumulo
三,关系模型
关系模型指的是二维表格模型,而一个关系型数据库就是二维表及其之间的练习所组成的一个数据组织
常见概念:
1.关系: 一张二维表,每个关系都有一个关系名,即表名
2.元组: 二维表中的一行,在数据库中被称为记录
3.属性: 二维表的一列,在数据库中被称为字段
4.域: 属性的取值范围,也就是数据库中某一列的取值限制
5.关键字: 一组可以唯一标识元组的属性数据库中称为主键,由一个或多个列组成
6.关系模式:指对关系的描述,格式: 关系名(属性1,...,属性N),在数据库中称为表结构
四,ACID 特性
A ( Atomic ) 原子性
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在 执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 (oracle通过redo和undo日志保证)
C ( Consistency ) 一致性
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成, 那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将 自动地回滚,系统返回到原始状态。
I ( Isolation ) 隔离性
指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事 务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一 事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
D ( Durability ) 持久性
指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据 库系统后,数据库还能恢复到事务成功结束时的状态。
五,CAP理论
NoSQL 的基本需求就是支持分布式存储,严格一致性与可用性需要互相取舍
CAP 理论: 一个分布式系统不可能同时满足 C (一致性) A (可用性) P (分区容错性) 三个基本需求,并且最多只能满足 其中的两项,但对于一个分布式系统来说,分区容错是基本需求,否则不能称之为分布式系统,因此需要在 C 和 A 之间寻求平衡
C ( Consistency ) 一致性
一致性是指更新操作成功并返回客户端完成之后,所有节点在同一时间的数据完全一致,与ACID 的 C 完全不同
A ( Availability ) 可用性
可用性是指服务一直可用,而且是正常响应时间
P ( Partition tolerance ) 分区容错性
分区容错性是指分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性的可用性的服务
六, SQL 与 NoSQL 的比较
1. 成本:
NoSQL 数据库简单易部署,基本都是开源软件,相比关系型数据库价格便宜
2.查询速度:
NoSQL数据存储于缓存之中,不需经过SQL层的解析
SQL 数据存储在硬盘中 ,查询速度远不及SQL
3.存储的格式:
NoSQL 存储格式: key - value 形式,文档形式,图片形式等
可以存储基础数据类型以及对象和集合等各种格式
SQL 只支持基础数据类型
4.扩展性
NoSQL 由于基于键值对,数据之间没有耦合性,容易水平扩展
SQL 由于有 join 的多表查询机制,将表格连接起来,限制了可扩展性
5.持久存储
NoSQL 不使用于持久存储,但是有灾难恢复机制
SQL 海量数据的持久存储
6.数据一致性
NoSQL 强调的是数据最终的一致性,从非数据库中读到的可能还是一个中间态的数据
SQL 强调数据的一致性
7. NoSQL 不提供对事物的处理,因为不满足ASIC特性