1. 首页
  2. mongodb教程

02-二、NoSQL 简介

引言

NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL"

在现代的计算系统上每天网络上都会产生庞大的数据量

这些数据有很大一部分是由关系数据库管理系统(RDMBSs)来处理

1970E.F.Codd's提出的关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单

通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

关系型数据库遵循 ACID 规则

1、 A (Atomicity) 原子性

原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚

比如银行转账,从 A 账户转100元至B账户,分为两个步骤:

  1. 从 A 账户取100元
  2. 存入100元至B账户

这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元
2、 C (Consistency) 一致性

一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束

例如现有完整性约束 a+b =10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败
3、 I (Isolation) 独立性

所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响

比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的
4、 D (Durability) 持久性

持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失

分布式系统

分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成

分布式系统是建立在网络之上的软件系统

分布式系统具有高度的内聚性和透明性

网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件

分布式系统可以应用在不同的平台上如:PC、工作站、局域网和广域网上等

分布式计算的优点

可靠性(容错) :

分布式计算系统中的一个重要的优点是可靠性
一台服务器的系统崩溃并不影响到其余的服务器

可扩展性:

在分布式计算系统可以根据需要增加更多的机器

资源共享:

共享数据是必不可少的应用,如银行,预订系统

灵活性:

由于该系统是非常灵活的,它很容易安装,实施和调试新的服务

更快的速度:

分布式计算系统可以有多台计算机的计算能力,比其它系统有更快的处理速度

开放系统:

由于它是开放的系统,本地或者远程都可以访问到该服务。

更高的性能:

相较于集中式计算机网络集群可以提供更高的性能,以及更好的性价比

分布式计算的缺点

1、 故障排除 :故障排除和诊断问题
2、 软件:更少的软件支持是分布式计算系统的主要缺点
3、 网络 :网络基础设施的问题,包括:传输问题,高负载,信息丢失等。
4、 安全性 :开放的系统使得分布式计算存在着数据的安全性和共享的风险等问题

什么是 NoSQL?

NoSQL 指的是 非关系型的数据库

NoSQLNot Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称

NoSQL 用于超大规模数据的存储,谷歌和 Facebook 就使用 NoSQL 存储它们收集的上万亿比特的用户收集的数据,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展

为什么使用 NoSQL ?

随着用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加

如果要对这些用户数据进行挖掘,那 SQL 数据库已经不适合这些应用了

NoSQL 数据库却能很好的处理这些大的数据

img_1.png

范例

社会化关系网


Each record: UserID1, UserID2 Separate records: UserID, first_name,last_name, age, gender,... Task: Find all friends of friends of friends of ... friends of a given user

Wikipedia 页面


Large collection of documentsCombination of structured and unstructured dataTask: Retrieve all pages regarding athletics of Summer Olympic before 1950.

RDBMS vs NoSQL

RDBMS

1、 高度组织化结构化数据
2、 结构化查询语言 ( SQL )
3、 数据和关系都存储在单独的表中
4、 数据操纵语言,数据定义语言
5、 严格的一致性
6、 基础事务

NoSQL

1、 代表着不仅仅是 SQL
2、 没有声明性查询语言
3、 没有预定义的模式 : 键/值对存储,列存储,文档存储,图形数据库
4、 最终一致性,而非 ACID 属性
5、 非结构化和不可预知的数据
6、 CAP 定理
7、 高性能,高可用性和可伸缩性

img_2.png

NoSQL 简史

NoSQL 一词最早出现于 Carlo Strozzi 开发的一个轻量、开源、不提供 SQL 功能的关系数据库

2009 年,Last.fmJohan Oskarsson 发起了一次关于分布式开源数据库的讨论
来自 RackspaceEric Evans 再次提出了 NoSQL 的概念
这时的 NoSQL 主要指非关系型、分布式、不提供 ACID 的数据库设计模式

2009 年在亚特兰大举行的 no:sql(east) 讨论会是一个里程碑,其口号是 "select fun, profit from real\_world where relational=false;"

此时,对 NoSQL 最普遍的解释是 "非关联型的",强调 Key-Value Stores 和文档数据库的优点,而不是单纯的反对RDBMS

CAP定理

CAP 定理(CAP theorem ), 又被称作 布鲁尔定理 ( Brewer’s theorem )

CAP 定理指出一个分布式计算系统不可能同时满足以下三点:

1、 一致性(Consistency) : 所有节点在同一时间具有相同的数据)
2、 可用性(Availability) : 保证每个请求不管成功或者失败都有响应
3、 分隔容忍(Partition tolerance) : 系统中任意信息的丢失或失败不会影响系统的继续运作

CAP 理论的核心是:

一个分布式系统不可能同时满足一致性,可用性和分区容错性,最多只能满足其中的两个

根据 CAP 定理可以将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

1、 CA – 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大
2、 CP – 满足一致性,分区容忍性的系统,通常性能不是特别高
3、 AP – 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些

img_3.png

NoSQL的优点/缺点

优点

1、 高可扩展性
2、 分布式计算
3、 低成本
4、 架构的灵活性,半结构化数据
5、 没有复杂的关系

缺点

1、 没有标准化
2、 有限的查询功能(到目前为止)
3、 最终一致是不直观的程序

BASE

BASE 是指 Basically AvailableSoft-stateEventually Consistent

CAP 理论的核心是:

一个分布式系统不可能同时满足一致性,可用性和分区容错性,最多只能满足其中的两个

BASENoSQL 数据库对可用性及一致性的弱要求原则

1、 Basically Availble 基本可用
2、 Soft-state 软状态/柔性事务

"Soft state" 可以理解为 "无连接" 的, 而 "Hard state" 是"面向连接" 的
3、 Eventual Consistency 最终一致性

最终一致性, 是 ACID 的最终目的

ACID vs BASE

ACID BASE
原子性(Atomicity) 基本可用(BasicallyAvailable)
一致性(Consistency) 软状态/柔性事务(Softstate)
隔离性(Isolation) 最终一致性(Eventualconsistency)
持久性(Durable)

NoSQL 数据库分类

类型 数据库 特点
列存储 HbaseCassandraHypertable 按列存储数据的特点是方便存储结构化和半结构化数据
文档存储 MongoDBCouchDB 采用JSON格式,存储的内容是文档型
key/value存储 Tokyo CabinetTokyoTyrantBerkeley DBMemcacheDBRedis 可以通过key快速查询到其value
图存储 Neo4JFlockDB 图形关系的最佳存储
对象存储 db4oVersant 通过对象的方式存取数据。
XML数据库 Berkeley DBXMLBaseX 可存储XML数据和支持XML查询语法

大公司都在使用 NoSQL

现在已经有很多公司在使用 NoSQL 数据库

  • Google
  • Facebook
  • Mozilla
  • Adobe
  • Foursquare
  • LinkedIn
  • Digg
  • Tencent
  • Baidu

希望读者能够给小编留言,也可以点击[此处扫下面二维码关注微信公众号](https://www.ycbbs.vip/?p=28 "此处扫下面二维码关注微信公众号")

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
  4. JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

    本文著作权归作者所有,如若转载,请注明出处

    转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

    标题:02-二、NoSQL 简介

    链接:https://www.javajike.com/article/1517.html

« 04-四、Windows 平台安装 MongoDB
01-一、MongoDB 基础教程»

相关推荐

QR code