一、简介
NoSQL(Not Only SQL),泛指非关系型数据库
Nosql总体上有以下四个特点:
(1)可伸缩性:有效应对负载变化的能力,多使用横向扩展(水平扩展)增加服务器节点
纵向扩展(垂直扩展):对服务器硬件升级
(2)开源:成本开销低
(3)灵活性:动态的添加属性,而不需要一开始定义好固定的表格结构
(4)可用性:一台故障,其他备用或从服务器补充
二、性质
相较于关系型数据库的ACID性质,NoSQL有简称为BASE的性质
先回顾下ACID:
原子性(atomicity):事务无法再分割
一致性(consistency):数据一致
隔离性(isolation):受隔离的事务在执行完之前,对用户不可见
持久性(durability):事务或操作一旦执行完毕,就会持久化
然后是NoSQL的BASE
BA(basically available,基本可用):副本的存在使得一台崩了其他都可使用
S(soft state):软状态,数据最终会被新值覆盖,不刷新就过期
E(eventually consistent,最终一致性):主从间会存在不一致的状态,但通过复制机制,最终都会一致
rdb和nosql最大的区别在于一个关注的是稳定关系模型的构建,一个关注的是提高性能满足巨量读写要求
所以后者有时会舍弃一致性和ACID事务,满足大量并发且迅速的读写要求
三、数据库类型
NoSQL可分4种类型
键值数据库
文档数据库
列族数据库:如HBase
图数据库
四、NoSQL的选择
1.键值数据库
适用于频繁读取并写入少量数据且数据模型较为简单
但是查询能力不如其他Nosql
用途:(1)缓存hot data,提升性能
(2)追踪web程序中容易发生变化的一些属性,如购物车,chat history
(3)存储移动应用程序中的配置信息和用户数据信息
(4)存放图像文件及音频文件等大型对象
2.文档数据库
特点在于灵活。如果应用程序需要存储大量数据,而且数据的属性富于变化,选择文档数据库较好
它支持索引,因而查询能力高于键值数据库
用途:(1)为读取和写入量比较大的网站提供后端支持
(2)对属性多变的数据类型进行管理,如管理产品信息
(3)记录各种类型的元数据
(4)使用json数据结构的应用程序
(5)需要在大结构里面嵌套小结构的应用程序,利用了文档可嵌套的性质
3.列族数据库
特点:能处理大量数据,读取和写入的效率较好,具备高度的可用性
应用场合:(1)应用程序总是需要向数据库中写入数据
(2)应用程序分布在地理位置不同的多个数据中心里面
(3)应用程序能够允许副本之间出现短暂的不一致现象
(4)应用程序用的字段会经常变化
(5)可能要处理大量数据如数百TB数据
具体场景:(1)通过网络通信和日志数据进行安全分析
(2)进行诸如生物学的大科学研究
(3)通过交易数据分析证券市场
(4)搜索引擎
(5)社交网络服务
4.图数据库
是否适用,判断依据就是:看实体实例之间是否具备关系
比如说电商应用程序中,订单A和订单B之间并没有联系,类似实体应该用键值数据库、文档数据库或关系型数据库
建模适用领域:
(1)网络与IT基础设施管理(比如校园网,下属子网,学院网,办公室局域网),计算机网络建模
(2)社交网络的表示
总体而言,在模型中明确表示实体间关系,而且需要迅速在实体间遍历的,选择图数据库
图数据库的意义在关联查询时效率非常高,在知识的表示上,通过推理实现概念检索,而且可以用图形化的方式展示结构化的知识,不局限于网页列表等形式