首页 > 数据库 >NoSQL数据库类型简介

NoSQL数据库类型简介

时间:2023-11-19 13:32:32浏览次数:33  
标签:存储 NoSQL 列式 简介 数据库 文档 键值

NoSQL数据库类型简介

近些年来,NoSQL 数据库的发展势头很快。据统计,目前已经产生了 50 到 150 个 NoSQL 数据库系统。但是,归结起来,可以将典型的 NoSQL 划分为 4 种类型,分别是键值数据库、列式数据库、文档数据库和图形数据库,如图 1 所示。

4种类型的NoSQL数据库 图 1 4 种类型的 NoSQL 数据库

键值数据库举例 图 2 键值数据库举例

1. 键值数据库

键值数据库起源于 Amazon 开发的 Dynamo 系统,可以把它理解为一个分布式的 Hashmap,支持 SET/GET 元操作。

它使用一个哈希表,表中的 Key(键)用来定位 Value(值),即存储和检索具体的 Value。数据库不能对 Value 进行索引和查询,只能通过 Key 进行查询。Value 可以用来存储任意类型的数据,包括整型、字符型、数组、对象等。

如图 2 所示。键值存储的值也可以是比较复杂的结构,如一个新的键值对封装成的一个对象。一个完整的分布式键值数据库会将 Key 按策略尽量均匀地散列在不同的结点上,其中,一致性哈希函数是比较优雅的散列策略,它可以保证当某个结点挂掉时,只有该结点的数据需要重新散列。

在存在大量写操作的情况下,键值数据库可以比关系数据库有明显的性能优势,这是因为关系型数据库需要建立索引来加速查询,当存在大量写操作时,索引会发生频繁更新,从而会产生高昂的索引维护代价。键值数据库具有良好的伸缩性,理论上讲可以实现数据量的无限扩容。

键值数据库可以进一步划分为内存键值数据库和持久化键值数据库。内存键值数据库把数据保存在内存中,如 Memcached 和 Redis

持久化键值数据库把数据保存在磁盘中,如 BerkeleyDB、Voldmort 和 Riak。

键值数据库也有自身的局限性,主要是条件查询。如果只对部分值进行查询或更新,效率会比较低下。在使用键值数据库时,应该尽量避免多表关联查询。此外,键值数据库在发生故障时不支持回滚操作,所以无法支持事务。

大多数键值数据库通常不会关心存入的 Value 到底是什么,在它看来,那只是一堆字节而已,所以开发者也无法通过 Value 的某些属性来获取整个 Value。

2. 列式数据库

列式数据库起源于 Google 的 BigTable,其数据模型可以看作是一个每行列数可变的数据表, 它可以细分为 4 种实现模式,如图 3 所示。

列式数据库模型 图 3 列式数据库模型

其中,Super Column Family 模式可以理解为 maps of maps,例如,可以把一个作者和他的专辑结构化地存成 Super Column Family 模式,如图 4 所示。

Super Column Family 模式 图 4 Super Column Family 模式

在行式数据库中查询时,无论需要哪一列都需要将每一行扫描完。假设想要在图 5 中的生日列表中查询 9 月的生日,数据库将会从上到下和从左到右扫描表,最终返回生日为 9 月的列表。

关系型数据库数据模型 图 5 关系型数据库数据模型

如果给某些特定列建索引,那么可以显著提高查找速度,但是索引会带来额外的开销,而且数据库仍在扫描所有列。

而列式数据库可以分别存储每个列,从而在列数较少的情况下更快速地进行扫描。图 6 的布局看起来和行式数据库很相似,每一列都有一个索引,索引将行号映射到数据,列式数据库将数据映射到行号,采用这种方式计数变得更快,很容易就可以查询到某个项目的爱好人数, 并且每个表都只有一种数据类型,所以单独善储列也利于优化压缩。

列式NoSQL存储模型 图 6 列式 NoSQL 存储模型

列式数据库能够在其他列不受影响的情况下,轻松添加一列,但是如果要添加一条记录时就需要访问所有表,所以行式数据库要比列式数据库更适合联机事务处理过程(OLTP),因为 OLTP 要频繁地进行记录的添加或修改。

列式数据库更适合执行分析操作,如进行汇总或计数。实际交易的事务,如销售类,通常会选择行式数据库。列式数据库采用高级查询执行技术,以简化的方法处理列块(称为“批处理”),从而减少了 CPU 使用率。

3. 文档数据库

文档数据库是通过键来定位一个文档的,所以是键值数据库的一种衍生品。在文档数据库中,文档是数据库的最小单位。文档数据库可以使用模式来指定某个文档结构。

文档数据库是 NoSQL 数据库类型中出现得最自然的类型,因为它们是按照日常文档的存储来设计的,并且允许对这些数据进行复杂的查询和计算。

尽管每一种文档数据库的部署各有不同,但是大都假定文档以某种标准化格式进行封装,并对数据进行加密。

文档格式包括 XML、YAML、JSON 和 BSON 等,也可以使用二进制格式,如 PDF、Microsoft Office 文档等。一个文档可以包含复杂的数据结构,并且不需要采用特定的数据模式,每个文档可以具有完全不同的结构。

文档数据库既可以根据键来构建索引,也可以基于文档内容来构建索引。基于文档内容的索引和查询能力是文档数据库不同于键值数据库的主要方面,因为在键值数据库中,值对数据库是透明不可见的,不能基于值构建索引。

文档数据库主要用于存储和检索文档数据,非常适合那些把输入数据表示成文档的应用。从关系型数据库存储方式的角度来看,每一个事物都应该存储一次,并且通过外键进行连接,而文件存储不关心规范化,只要数据存储在一个有意义的结构中就可以。

如图 7 所示,如果我们要将报纸或杂志中的文章存储到关系型数据库中,首先我们要对存储的信息进行分类,即将文章放在一个表中,作者和相关信息放在一个表中,文章评论放在一个表中,读者信息放在一个表中,然后将这四个表连接起来进行查询。

但是文档存储可以将文章存储为单个实体,这样就降低了用户对文章数据的认知负担。

4. 图形数据库

图形数据库以图论为基础,用图来表示一个对象集合,包括顶点及连接顶点的边。图形数据库使用图作为数据模型来存储数据,可以高效地存储不同顶点之间的关系。

图形数据库是 NoSQL 数据库类型中最复杂的一个,旨在以高效的方式存储实体之间的关系。

图形数据库适用于高度相互关联的数据,可以高效地处理实体间的关系,尤其适合于社交网络、依赖分析、模式识别、推荐系统、路径寻找、科学论文引用,以及资本资产集群等场景。

关系型数据库和文档数据库存储报纸或杂志中的文章的比较 图 7 关系型数据库和文档数据库存储报纸或杂志中的文章的比较

图形或网络数据主要由结点和边两部分组成。结点是实体本身,如果是在社交网络中,那么代表的就是人。边代表两个实体之间的关系,用线来表示,并具有自己的属性。另外,边还可以有方向,如果箭头指向谁,谁就是该关系的主导方,如图 8 所示。

图形数据库模型示意 图 8 图形数据库模型示意

图形数据库在处理实体间的关系时具有很好的性能,但是在其他应用领域,其性能不如其他 NoSQL 数据库。

典型的图形数据库有 Neo4J、OrientDB、InfoGrid、Infinite Graph 和 GraphDB 等。有些图形数据库,如 Neo4J,完全兼容 ACID 特性。

标签:存储,NoSQL,列式,简介,数据库,文档,键值
From: https://blog.51cto.com/teayear/8472444

相关文章

  • 通过PowerShellPlus示例脚本学习PowerShell-连接SQLServer数据库
    ##=====================================================================##Title:Connect-MSSQL-IPSQLAuth##Description:Connectto$ServerNameusingSQLServerauthentication.##Thisconnectionisnotencrypted.##......
  • oracle19cPDB数据库连不上,提示ORA-01109: database not open
    今天尝试创建了一个RAC环境的PDB数据库,在本地执行alterpluggabledatabasepdb01open成功了,但是使用上去了plus连接还是连接不上,提示错误如下:C:\Users\Administrator>sqlplussystem/[email protected]:1521/pdb01SQL*Plus:Release19.0.0.0.0-Productionon星期日1......
  • ORALE学习第三天心得:深入理解数据库管理系统
    在过去的三天里,我深入学习了Oracle数据库管理系统的相关知识。通过理论学习、实践操作和问题解决,我对关系型数据库有了更深入的理解,并且掌握了一些实用的技能。在这篇技术文章中,我将分享我的学习心得,并提供一些相关的源代码示例。一、关系型数据库管理系统概述关系型数据库管理系统......
  • 无涯教程-RSpec - 简介
    行为驱动开发(英语:Behavior-drivendevelopment,缩写BDD)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。BDD最初是由DanNorth在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。在过去数年里,它得......
  • 25届实习秋招-Java面试-MySQL数据库面试题整理-牛客网近一年
    MySQL概述:关系型数据和非关系型数据库的区别,有哪些应用场景有哪些非关系的单表操作:三种SQL语言类型,MySql本身常用命令DDL-数据定义语句:表的常用操作truncate/delete--drop操作的区别varchar最大字节数DMLUpdate语句的sql执行流程对行数据的修改是......
  • Flutter应用-使用sqflite升级数据库
    问题描述使用fluttter开发的应用程序发布后,发现数据库有些设计不合理。如何来更新数据库呢?使用sqflite来处理数据库,但是第一版软件发布后,发现数据库不太合理要改动,想新的应用安装启动后更新数据库。下面以将一张表名称叫timerdata的表在新版应用启动时将这张表的名称改为taskdat......
  • 大型数据库实验七
    ......
  • 【第20章】数据库系统安全
    20.1数据库安全概况20.1.1数据库安全概念主流的数据库系统有MSSQL、MySQL、Oracle、DB2等,数据库安全是指数据库的机密性、完整性、可用性能够得到保障,其主要涉及数据库管理安全、数据安全、数据库应用安全以及数据库运行安全。20.1.2数据库安全威胁(1)授权的误用(Mi......
  • Mysql数据库查询之模糊查询(基础常用)
    1.基础模糊查询1.1查询三字结尾的数据select*fromawhere`name`like'%三'1.2查询张字开头的数据select*fromawhere`name`like'张%' 1.3所以模糊查询查询全部数据.select*fromawhere`name`like'%%'1.4所以多模糊查询,以此类推sele......
  • 数据库的设计规范
    数据库的设计规范1.为什么需要数据库设计个人观点一个好的数据库设计,可以减轻开发的难度,提高开发效率。同时减轻后续数据库的维护工作以及良好的扩展性。总体一句话:一个好的数据库设计有诸多的好处。反之,如果数据库设计的不行,那就...设计数据库(表)的时候,要考虑很多问题在。......