什么是NoSQL

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系

型数据库的数据库管理系统的统称。

NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。

这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

为什么使用NoSQL

今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人

信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户

数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数

据。

NoSQL的优点/缺点

优点:

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

缺点:

没有标准化

有限的查询功能(到目前为止)

最终一致是不直观的程序

RDBMS 和NoSQL的区别

NoSQL

代表着不仅仅是SQL

没有声明性查询语言

没有预定义的模式

键-值对存储,列存储,文档存储,图形数据库

最终一致性,而非ACID属性

非结构化和不可预知的数据

CAP定理——

“CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。”

高性能,高可用性和可伸缩性

RDBMS

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

NoSQL数据库四大家族

键值(Key-Value)存储数据库

特点——

键值数据库就想传统语言中使用的哈希表,通过key添加、查询或者删除数据

优点——

查询速度更快

缺点——

数据无结构化,通常只被当做字符串或者二进制数据存储

应用场景——

内容缓存、用户信息比如会话、配置信息、购物车等等,主要用于处理大量数据的高访问负载

NoSQL代表——

Redis、Memcached...

文档型数据库

特点——

文档数据库将数据以文档的形式储存,类似JSON,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。

优点——

数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构

应用场景——

日志、web应用等

NoSQL代表——

MongoDB、CouchDB...

列数据库

特点——

列存储数据库将数据存储在列族中,将多个列集合成一个列族,键仍然存在,但是他们的特点是指向多个列。举个例子,如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中

优点——

列存储查找速度快,可扩展性强,更容容易进行分布式扩展,适用于分布式的文件系统,应对分布式存储的海量数据

缺点——

查询性能不高,缺乏统一的查询语法

应用场景——

日志、分布式文件系统(对象存储)、推荐画像、时空数据、消息/订单等等。

NoSQL代表——

Cassandra、HBase....

图形(Graph)数据库

特点——

图形数据库允许我们将数据以图的方式存储

优点——

图形相关算法,比如最短路径寻址,N度关系查找等

缺点——

很多时候需要对整个图做计算才能提出需求的信息,分布式的群集方案不好做,处理超

级节点乏力,没有分片存储机制,国内社区不活跃

应用场景——

社交网络,推荐系统等,专注于构建关系图谱

NoSQL代表——

Neo4j、Infinite Graph...