乐趣区

关于mongodb:MongoDB学习笔记1NoSQL基础

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 排名依据数据库管理系统的受欢迎水平对其进行排名。该排名每月更新一次。

退出移动版