NoSQL学习
为什么用NoSQL
如今我们可以通过第三方平台可以很容易的访问和抓取数据。用户个人信息,社交网站,地理位置,用户生成的数据和用户操作日志已经成倍的增加,我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了,NoSQL数据库的发展却能很好的处理这些大的数据。在云计算、大数据分析、数据量级的飞速暴增,传统的SQL数据库难以支撑目前的业务,所以需要使用NoSQL数据库。
是什么
NoSQL(NoSQL=Not Only SQL),即”不仅仅是SQL“,泛指非关系型数据库,例如谷歌或Facebook每天为他们的用户收集万亿比特的数据,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
特性
易扩展
NoSQL数据库种类繁多,但是有一个共同的特点都是去掉关系型数据库的关系型特性。
数据之间无关系,这样就非常容易扩展,也无形之间,在架构的层面上带来了可扩展的能力。
大数据量高性能
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。
这得益于它的无关系性,数据库的结构简单。
多样灵活的数据模型
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系型数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直是一个噩梦。
传统RDBMS VS NoSQL
RDBMS
- 高度组织化结构化数据
- 结构化查询语句(SQL)
- 数据和关系都存储在单独的表中
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务
NoSQL
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
- 键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性
3V+3高
- 大数据时代的3V
- 海量Volume
- 多样Variety
- 实时Velocity
- 互联网需求的3高
- 高并发
- 高可用
- 高性能
NoSQL数据模型
传统关系型数据库:
ER图(1:1/1:N/N:M,主外键等)
NoSQL:聚合模型
- KV键值对
- Bson
- 列族
- 图形
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象
NoSQL数据库的四大分类
- KV键值:redis
- 文档型数据库(bson格式比较多):MongoDB
- 列存储数据库:HBase、Cassandra、分布式文件系统
- 图关系数据库:Neo4J、InfoGrid
分布式数据库中CAP原理+BASE
CAP
- C:Consistency(强一致性)
- A:Availability(可用性)
- P:Partition tolerance(分区容错性)
CAP的3进2
一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
在分布式存储系统中,分区容忍性是我们必须需要实现的,所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点
BASE
- 基本可用(Basically Available)
- 软状态(Soft state)
- 最终一致(Eventually consistent)
常用NoSQL数据库
- Memcached
- 很早出现的NoSQL数据库
- 数据存在内存中,一般不持久化
- 支持简单的key-value模式
- 一般是作为缓存数据库辅助持久化的数据库
- 使用多线程+锁
- Redis
- 几乎覆盖了Memcached的绝大部分功能
- 数据都在内存中,支持持久化,主要用作备份恢复
- 支持key-value模式,还支持list、set、hash、zset等
- 一般是作为缓存数据库辅助持久化的数据库
- 使用单线程+多路IO复用
- Mongdb
- 高性能、开源、模式自由(schema free)的文档型数据库
- 数据都在内存中,如果内存不足,Mongdb是一个环形队列,支持先进先出,最先进来的数据先被覆盖
- 虽然是key-value模式,但是对value(尤其是json)提供把不常用的数据保存到硬盘,有丰富的查询功能
- 支持二进制数据及大型对象
- 可以根据数据的特点替代RDBMS,成为独立的数据库。或者配合RDBMS
- HBase
- 是Hadoop项目中的数据库。用于需要对大量的数据进行随机、实时的读写操作的场景中。
- HBase的目标就是处理数据量非常庞大的表,可以用普通的计算机处理超过10亿行数据,还可以处理有数百万列元素的数据表
- Cassandra
- 一款免费的开源NoSQL数据库,其设计目的在于管理由大量商用服务器构建起来的庞大集群上的海量数据集(数据量通常达到PB级别)
- 最为卓越的长处是对写入及读取操作进行规模调整,而且其不强调主集群的设计思路能够以相对直观的方式简化各集群的创建与扩展流程
- Neo4j
- 主要应用:社会关系,公共交通网络,地图及网络拓扑
应用场景
适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
不适用场景
- 需要事务支持
- 基于sql的结构化查询存储,处理复杂的关系,需要即席查询(条件查询)
用不着sql的和用了sql也不行的情况,请考虑NoSQL
最后更新: 2020年07月17日 17:26