1.1、NoSQL 概念
NoSQL 并非字面的“不是 SQL”或者“非 SQL”,而是 NoSQL=Not Only SQL,即“不仅仅是 SQL”,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL:非关系型、分布式、不提供 ACID 的数据库设计模式。
NoSAQL 用于超大规模数据的存储,这些类型的数据存储不须要固定的模式,无需多余操作就能够横向扩大。
【扩大】ACID 的介绍
关系型数据库遵循 ACID 规定:
(1)A (Atomicity) 原子性
原子性很容易了解,也就是说事务里的所有操作要么全副做完,要么都不做,事务胜利的条件是事务里的所有操作都胜利,只有有一个操作失败,整个事务就失败,须要回滚。比方银行转账,从 A 账户转 100 元至 B 账户,分为两个步骤:1)从 A 账户取 100 元;2)存入 100 元至 B 账户。这两步要么一起实现,要么一起不实现,如果只实现第一步,第二步失败,钱会莫名其妙少了 100 元。
(2)C (Consistency) 一致性
一致性也比拟容易了解,也就是说数据库要始终处于统一的状态,事务的运行不会扭转数据库本来的一致性束缚。
(3)I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会相互影响,如果一个事务要拜访的数据正在被另外一个事务批改,只有另外一个事务未提交,它所拜访的数据就不受未提交事务的影响。比方现有有个交易是从 A 账户转 100 元至 B 账户,在这个交易还未实现的状况下,如果此时 B 查问本人的账户,是看不到新减少的 100 元的
(4)D (Durability) 持久性
持久性是指一旦事务提交后,它所做的批改将会永恒的保留在数据库上,即便呈现宕机也不会失落。
【扩大】CAP 的介绍
- C:Consistency(强一致性)
- A:Availability(可用性)
-
P:Partition tolerance(分区容错性)
CAP 实践就是说在分布式存储系统中,最多只能实现下面的两点。而因为以后的网络硬件必定会呈现提早丢包等问题,所以在分布式系统中分区容错性是咱们必须须要实现的。所以咱们只能在一致性和可用性之间进行衡量,没有 NoSQL 零碎能同时保障这三点。
CA:传统 Oracle 数据库。(单点集群,满足一致性,可用性的零碎,通常在可扩展性上不太强大。)
AP:大多数网站架构的抉择在。(满足可用性,分区容错性的零碎,通常可能对一致性要求低一些。)
CP:Redis、Mongodb。(满足一致性,分区容错性的零碎,通常性能不是特地高。)
1.2、为什么应用 NoSQL?
明天咱们能够通过第三方平台(如:Google,Facebook 等)能够很容易的拜访和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志曾经成倍的减少。咱们如果要对这些用户数据进行开掘,那 SQL 数据库曾经不适宜这些利用了, NoSQL 数据库的倒退却能很好的解决这些大的数据。
因为关系型数据库的范式束缚、事物个性、磁盘 IO 等特点,若服务器应用关系型数据库,当有大量数据产生时,传统的关系型数据库曾经无奈满足疾速查问与插入数据的需要,NoSQL 的呈现解决了这一危机。它通过升高数据的安全性,缩小对事务的反对,缩小对简单查问的反对,获取性能上的晋升,然而,在某些特定场景下 NoSQL 依然不是最佳抉择,比方一些相对要有事务与平安指标的场景。
- 具备灵便的数据模型,能够解决非结构化 / 半结构化的大数据;
- 容易实现可伸缩性(向上扩大与程度扩大);
- 读写性能高(无关系性的数据、数据库构造简略)。
当初个别互联网公司,都是关系型数据库与非关系型数据库组合应用。关系型数据库用来做数据的存储与长久化,非关系型数据库用来做内存、缓存,某些场景不须要事务然而频繁读取操作也用到非关系型数据库。
【留神】 当初 NoSQL 没有一个统一标准的,也就是说,每学习一种非关系型数据库,它们里的查问之类的都不一样,这样学习老本就很大了,所以 NoSQL 这个毛病很大。
1.3、NoSQL 数据库四大家族
1.3.1、键值(key-value)存储
- 特点:键值数据库就像传统语言中应用的哈希表。通过 key 增加、查问或者删除数据。
- 长处:查问速度快。
- 毛病:数据无结构化,通常只被当做字符串或者二进制数据存储。
- 利用场景:内容缓存、用户信息,比方会话、配置信息、购物车等,次要用于解决大量数据的高拜访负载。
- NoSQL 代表:Redis(临时性 / 永久性键值存储)、Memcached(临时性键值存储)、DynamoDB 等。
1.3.2、文档(Document-Oriented)
- 特点:该类型的数据模型是版本化的文档,半结构化的文档以特定的格局存储,比方 json,是一系列数据项的汇合,每个数据项都有一个名称与对应的值,值既能够是简略的数据类型,如字符串、数字和日期等;也能够是简单的类型,如有序列表和关联对象。
- 长处:数据结构要求不严格,表构造可变,不须要像关系型数据库一样须要事后定义表构造。
- 毛病:查问性能不高,不足对立的查问语法。
- 利用场景:日志、Web 利用等。
- NoSQL 代表:MongoDB、CouchDB 等。
1.3.3、列族存储
- 特点:应答分布式存储的海量数据。列存储数据库将数据存储在列表中,将多个列聚合成一个列族,键依然存在,然而它们的特点是指向了多个列。举个例子,如果咱们有一个 Person 类,咱们通常会一起查问他们的姓名和年龄而不是薪资,这种状况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。
- 长处:列存储查问速度快,可扩展性强,更容易进行分布式扩大,实用于分布式的文件系统,应答分布式存储的海量数据。
- 毛病:查问性能不高,不足对立的查问语法。
- 利用场景:日志、分布式的文件系统(对象存储)、举荐画像、时空数据、音讯 / 订单等。
- NoSQL 代表:Cassandra、HBase 等。
1.3.4、图形存储
- 特点:图形数据库容许咱们将数据以图的形式存储,它是应用灵便的图形模型,并且可能扩大到多个服务器上。
- 长处:图形相干算法,比方最短门路寻址,N 度关系查找等。
- 毛病:很多时候须要对整个图做计算能力得出须要的信息,分布式的集群计划不好做,解决超级节点乏力,没有分片存储机制,国内社区不沉闷。
- 利用场景:社交网络,举荐零碎等。专一于构建关系图谱。
- NoSQL 代表:Neo4j、Infinite Graph 等。
1.4、NoSQL 优缺点
(1)、长处:
- 高扩展性:像 NoSQL 数据库(例如 Cassandra)能轻松地增加新的节点来扩大这个集群。而关系型数据库存在 join 这样多表查问机制,使得数据库在扩大方面很艰巨;
- 高可用(读写快):查问效率高,关系型数据库受限于磁盘 IO,在高并发状况下压力倍增,而像 Redis 这种内存数据库每秒反对 10W 次读写。
- 数据模型灵便:传统关系型数据库都是结构化的表,而 NoSQL 能够是键值、文档、列族、图形。
- 低成本:开源软件,相比 Oracle 这种企业受权费用低了不少。
(2)、毛病:
- 没有固定的查问规范,学习老本高;
- 大多数不反对事务(Redis 反对,MongoDB 不反对);
- 大多数都是初创产品,不够成熟。
1.5、数据库管理系统排行
依据 DB-Engines:https://db-engines.com/en/ran… 的排行,本文截取了排行榜 Top 45 如下图所示。DB-Engines 排名依据数据库管理系统的受欢迎水平对其进行排名。该排名每月更新一次。