前言:
在NoSQL数据库中,主要有四大分类,分别是KV键值对数据库、文档型数据库、列存储数据库和图形关系数据库,那么它们各自的特点以及之间的区别是什么呢?这就是今天我们所要学习的内容!
在现在的互联网企业中,阿里和百度使用Redis和MemCached,而美团使用的Redis和Tair,新浪使用的也是Redis,Redis的出现频率是相当之高!
Redis是一个Key-Value存储系统。它支持存储的Value类型很丰富,包括String (字符串)、List (链表)、Set (集合)、ZSet(sorted set – 有序集合) 和 Hash(哈希类型);这些数据类型都支持push (出栈) / pop (入栈)、add (添加) / remove (移除) 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的
Redis是一个高性能的Key-Value数据库。Redis很大程度补偿了MemCached这类 Key-Value存储的不足 ,在部分场景 可以对关系型数据库起到很好的 补充作用 ,它同时支持Java、C/C++、C#,PHP,JavaScript等多种语言平台,使用起来很方便
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器,这使得Redis可执行单层树复制,存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对 读取操作的可扩展性和数据冗余 很有帮助。
主要区别:
使用场景:
使用案例:
在电商平台中,一般会有商品分类,还有搜索结果列表;针对这种情况,对分类数据可以使用MemCached,因为分类数据一般不会改变,读多写少,直接存储在MemCached中,每次查询都只需要从MemCached中获取就可以了
文档型数据库是 NoSQL 中非常重要的一个分支,它主要用来存储索引并管理面向文档的数据或者类似的半结构化数据;
顾名思义, 文档型数据库 (面向文档数据库)的关键核心概念即文档(Document),它是数据库中最小的单位。
而MongoDB是目前最流行的数据库之一 (目前很多公司开发也在使用,所以MongoDB也成为了企业招聘时的必备技能之一!)
MongoDB是一个基于分布式文件存储的数据库,由**C++**编写,旨在为Web应用提供可扩展的高性能数据存储的解决方案;
MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是 非关系型数据库中最像关系型数据库的 ,并且其 功能十分丰富!
MongoDB主要用来处理大量文档,其 数据结构十分松散,使用的是BSON格式 (类似于JSON,由于其使用二进制形式,又被成为二进制JSON)
谈到列式存储数据库,你可能不太清楚,但你会联想到传统的行式存储数据库,因为列式存储数据库是相对行式存储数据库而言的,就像关系型数据库和非关系型数据库一样,后者的出现都是为了弥补前者在某些场景下的不足而诞生的
传统的关系型数据库,如 Oracle、DB2、MySQL、SQL Server 等均采用行式存储法 (Row-based),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的, 一行中的数据在存储介质中以连续存储形式存在。
而随着大数据时代的到来,传统的行式存储数据库已经无法满足在某些方面的需求了,所以就出现了列式存储和列式存储数据库
列式存储 (Column-based) 是相对于行式存储来说的,新兴的 Hbase、HP Vertica、EMC Greenplum 等分布式数据库均采用列式存储。在基于列式存储的数据库中, 数据是按照列数据为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。
行式存储数据库适用场景:
列式存储数据库适用场景:
当然,列式存储数据库也有不太适用的场景,主要包括:
1.数据需要频繁更新的交易场景;
2.表中列属性较少的小量数据库场景;
3.不适合做含有删除和更新的实时操作
行式存储和列式存储数据库适用场景区别:
行式存储数据库主要使用于在线交易性的OLTP(联机事务处理)应用,而列式存储数据库主要适用于海量静态数据的分析,一般应用于OLAP(联机分析处理)。
但只依靠OLTP还是OLAP来区分是采用行式存储数据库还是列式存储数据库,在很多时候还不是很明确,特别很多时候,有些应用很难说是OLTP还是OLAP,例如对海量数据的查询
OLTP (全称为On-Line Transaction Processing),即联机事务处理过程,也称为面向交易的处理过程
OLTP的特征是是什么?
OLTP的基本特征是:前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。
什么是OLAP?
OLAP (全称为On-Line Analysis Processing),即联机分析处理,是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。
它具有FASMI (Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。
F是快速性 (Fast),指系统能在数秒内对用户的多数分析要求做出反应;
A是可分析性 (Analysis),指用户无需编程就可以定义新的专门计算,将其作为分析的一部分,并以用户所希望的方式给出报告;
M是多维性(Multi—dimensional),指提供对数据分析的多维视图和分析;
I是信息性(Information),指能及时获得信息,并且管理大容量信息。
OLTP和OLAP的使用场景:
OLTP(联机事务处理)是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易
OLAP(联机分析处理)是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果
OLTP和OLAP区别:
OLTP | OLAP | |
---|---|---|
用户 | 操作人员,底层管理人员 | 决策人员,高级管理人员 |
功能 | 日常操作处理 | 分析决策 |
DB设计 | 面向应用 | 面向主题 |
数据 | 当前的,最新的,细节的,二维的,分立的 | 历史的,聚集的,多维的,集成的,统一的 |
存取 | 读/写数十条记录 | 读上百条记录 |
工作单位 | 简单的事务 | 复杂的查询 |
DB大小 | 100MB-GB | 100GB-TB |
图形数据库是一种NoSQL(非关系型) 数据库,它应用图形理论存储实体之间的关系信息,例如社会网络中人与人之间的关系。
下面是一张网络人际关系图,如果不使用图形进行表达,其中错综复杂的关系,很难想象如何使用传统的SQL语句进行查询
关系型数据库用于存储“关系型”数据的效果并不好,其 查询的复杂和缓慢远远超出预期,而图形数据库的独特设计 恰恰弥补了这个缺陷。
在一个图形数据库中,最主要的组成有两种,结点集和连接结点的关系(有的也称泡泡和箭头);结点集就是 图中一系列结点的集合,比较接近于关系数据库中 所最常使用的表,而关系则是图形数据库所特有的组成。
常用的图形数据库有Neo4j、GraphDB、InfiniteGraph和HugeGraph等
GPL (全称为GNU General Public License,又称GNU GPL),即GNU通用公共许可协议,是一个广泛被使用的自由软件许可协议,最初由理查德·斯托曼为GNU计划而撰写。
2007年6月29日发布了最新版本——“第3版”(v3)。
GPL给予了电脑程序自由软件的定义,并且使用“Copyleft”来确保程序的自由被完善的保留。
AGPL是GPL的一个补充, 在GPL的基础上加了一些限制。
原有的GPL协议,由于网络服务公司兴起(例如Google)产生了一定的漏洞,比如使用GPL的自由软件,但是并不发布于网络之中,则可以自由的使用GPL协议却不开源自己私有的解决方案,AGPL则增加了对此做法的约束
AGPL协议的制定是为了避免一个GPL/LGPL协议中的漏洞,称之为 Web Service Loophole。
分类 | 数据模型 | 典型代表 | 优点 | 缺点 | 应用场景 |
---|---|---|---|---|---|
KV键值对数据库 | Key指向Vlaue的键值对,通常用哈希表来实现 | Redis、Voldemort、Orcale BDB等 | 查找速度快 | 数据无结构化(通常纸被当做字符串或者二进制数据) | 适用于内容缓存,用于处理大量数据的高访问负载,也用于一些日志系统等等 |
文档型数据库 | Key-Value对应的键值对,Value为结构化数据 | MongoDB、CouchDB等 | 数据结构要求不严格,表结构可变(不需要像关系型数据库一样,需预先定义表结构) | 查询性能不高,而且缺乏统一的查询语法 | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) |
列存储数据库 | 分布式的文件存储系统 | HBase、Cassandra、Riak等 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 | 分布式的文件系统 |
图形数据库 | 图结构 | Neo4j、GraphDB、InfiniteGraph、HugeGraph等 | 可以利用图结构相关算法 (如最短路径寻址,N度关系查找等) | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式集群 | 社交网络关系,个性推荐系统等,专注于构建关系图谱 |
好了,今天关于NoSQL数据库的四大分类学习就到此结束了,欢迎大家学习和讨论!
参考视频链接:
https://www.bilibili.com/video/BV1S54y1R7SB (B站UP主遇见狂神说的Redis基础学习)
参考资料链接:
https://baike.baidu.com/item/Redis/6549233 (Redis 百度百科)
https://baike.baidu.com/item/Memcached/1625373 (memcached 百度百科)
https://baike.baidu.com/item/%E5%BE%AA%E7%8E%AF%E5%86%97%E4%BD%99%E6%A3%80%E6%9F%A5/10168241 (循环冗余校验 百度百科)
https://baike.baidu.com/item/mongodb/60411 (mongodb 百度百科)
https://baike.baidu.com/item/OLTP/5019563 (OLTP 百度百科)
https://baike.baidu.com/item/%E8%81%94%E6%9C%BA%E5%88%86%E6%9E%90%E5%A4%84%E7%90%86/423874 (联机分析处理 百度百科)
https://baike.baidu.com/item/GNU%E9%80%9A%E7%94%A8%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81/393832 (GNU通用公共许可证 百度百科)
https://baike.baidu.com/item/AGPL/4949728 (AGPL 百度百科)
参考博客链接:
https://searchdatabase.techtarget.com.cn/7-20834 (悉数11种主流NoSQL文档型数据库)
https://blog.csdn.net/u010398838/article/details/79995636 (redis和memcached的区别和使用场景)
https://cloud.tencent.com/developer/article/1528525 (数据库中的 “行式存储”和“列式存储”)
http://www.cnblogs.com/taven/archive/2012/03/05/2380557.html (OLTP 和 OLAP 的区别)
https://www.jianshu.com/p/9f204c50d309 (NoSQL数据库的四大类型)