文档章节

五大主流数据库模型

彭苏云
 彭苏云
发布于 2015/01/12 15:45
字数 1512
阅读 68
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

导读:无论是关系型数据库还是非关系型数据库,都是某种数据模型的实现。本文将为大家简要介绍5种常见的数据模型,让我们来追本溯源,窥探现在流行的数据库解决方案背后的神秘世界。

什么是数据模型?

访问数据库中的数据取决于数据库实现的数据模型。数据模型会影响客户端通过API对数据的操作。不同的数据模型可能会提供或多或少的功能。一般而言,数据模型不会直接提供过多的功能,许多功能必须由客户端自行实现。

数据模型决定了客户端如何对数据进行编码存储。应用程序需要某种域模型与存储技术支持的特性进行映射。

迄今为止,主导的数据模型仍然是关系模型。在这里,我们主要想为大家介绍一下非关系模型,作为对比,本文也会简要介绍一下关系模型。

数据模型概述

1.关系模型

关系模型使用记录(由元组组成)进行存储,记录存储在表中,表由架构界定。表中的每个列都有名称和类型,表中的所有记录都要符合表的定义。SQL是专门的查询语言,提供相应的语法查找符合条件的记录,如表联接(Join)。表联接可以基于表之间的关系在多表之间查询记录。

表中的记录可以被创建和删除,记录中的字段也可以单独更新。

关系模型数据库通常提供事务处理机制,这为涉及多条记录的自动化处理提供了解决方案。

对不同的编程语言而言,表可以被看成数组、记录列表或者结构。表可以使用B树和哈希表进行索引,以应对高性能访问。

2.键值存储

键值存储提供了基于键对值的访问方式。

键值对可以被创建或删除,与键相关联的值可以被更新。

键值存储一般不提供事务处理机制。

对不同的编程语言而言,键值存储类似于哈希表。对此,不同的编程语言有不同的名字(如,Java称之为“HashMap”,Perl称之为“hash”,Python称之为“dict”,PHP称之为“associative array”),C++则称之为“boost::unordered_map<...>”。

键值存储支持键上自有的隐式索引。

键值存储看起来好像不太有用,但却可以在“值”上存储大量信息。“值”可以是一个XML文档,一个JSON对象,或者其它任何序列化形式。

重要的是,键值存储引擎并不在意“值”的内部结构,它依赖客户端对“值”进行解释和管理。

3.文档存储

文档存储支持对结构化数据的访问,不同于关系模型的是,文档存储没有强制的架构。

事实上,文档存储以封包键值对的方式进行存储。在这种情况下,应用对要检索的封包采取一些约定,或者利用存储引擎的能力将不同的文档划分成不同的集合,以管理数据。

与关系模型不同的是,文档存储模型支持嵌套结构。例如,文档存储模型支持XML和JSON文档,字段的“值”又可以嵌套存储其它文档。文档存储模型也支持数组和列值键。

与键值存储不同的是,文档存储关心文档的内部结构。这使得存储引擎可以直接支持二级索引,从而允许对任意字段进行高效查询。支持文档嵌套存储的能力,使得查询语言具有搜索嵌套对象的能力,XQuery就是一个例子。MongoDB通过支持在查询中指定JSON字段路径实现类似的功能。

4.列式存储

如果翻转数据,列式存储与关系存储将会非常相似。与关系模型存储记录不同,列式存储以流的方式在列中存储所有的数据。对于任何记录,索引都可以快速地获取列上的数据。

Map-reduce的实现Hadoop的流数据处理效率非常高,列式存储的优点体现的淋漓极致。因此,HBaseHypertable通常作为非关系型数据仓库,为Map-reduce进行数据分析提供支持。

关系类型的列标对数据分析效果不好,因此,用户经常将更复杂的数据存储在列式数据库中。这直接体现在Cassandra中,它引入的“column family”可以被认为是一个“super-column”。

列式存储支持行检索,但这需要从每个列获取匹配的列值,并重新组成行。

5.图形数据库

图形数据库存储顶点和边的信息,有的支持添加注释。

图形数据库可用于对事物建模,如社交图谱、真实世界的各种对象。IMDB(Internet Movie Database)站点的内容就组成了一幅复杂的图像,演员与电影彼此交织在一起。

图形数据库的查询语言一般用于查找图形中断点的路径,或端点之间路径的属性。Neo4j是一个典型的图形数据库。

选择哪一种数据模型?

数据模型有着各自的优缺点,它们适用于不同的领域。不管是选择关系模型,还是非关系模型,都要根据实际应用的场景做出选择。也许你会发现单一的数据模型不能满足你的解决方案,许多大型应用可能需要集成多种数据模型。(张志平/编译)

原文链接:Data Models

本文转载自:http://www.csdn.net/article/1970-01-01/313041

彭苏云
粉丝 44
博文 204
码字总数 54255
作品 0
广州
高级程序员
私信 提问
加载中

评论(0)

数据库密码爆破HexorBase

数据库密码爆破HexorBase 数据库服务是服务器上最常见的一类服务。由于数据库保存大量的敏感信息,所以它的安全非常重要。测试数据库服务安全的重要方式,就是检查口令的强壮度。 Kali Linux...

大学霸
2016/12/12
269
0
Workflow-产品:泛微工作流引擎

ylbtech-Workflow-产品:泛微工作流引擎 1.返回顶部 1、 工作流引擎平台技术架构 TECHNOLOGY FRAMEWORK 高度协同系统各应用模块 泛微工作流引擎平台是整个协同办公平台的血脉,它是连接并打通...

osc_zt8a0qx3
2019/10/30
21
0
prometheus比zabbix好在哪点?

分享网易云轻舟微服务选择基于 Prometheus 开发微服务监控系统的考量: 开源 云原生 与微服务监控需求的匹配度很高 开源 Prometheus是CNCF(云原生计算基金会)旗下成熟的开源项目,而开源技...

网易云
2019/01/04
0
0
关于 NoSQL 数据库你应该了解的 10 件事

四分之一个世纪以来,关系型数据库(RDBMS)一直是主流数据库模型。但是现在非关系型数据库,“云”或者“NoSQL”数据库,正在作为一种替代数据库模型获得越来越多的占有率。本文中我们将关注...

YuanyuanL
2015/12/02
9.5K
10
vscode使用Chrome浏览器调试不好用,解决方法!!

1、如果你是刚下载vscode,那么你需要下载两个插件。 1. open in browser(在浏览器中查看,支持五大主流浏览器),下载并启用。 2. view-in-browser (在浏览器中查看,同样支持五大主流浏览器...

osc_byhxg8pe
2019/05/03
2
0

没有更多内容

加载失败,请刷新页面

加载更多

SQL Server 并发控制 第三篇:隔离级别和行版本(2)

SQL Server 并发控制 第一篇:并发模式和事务 SQL Server 并发控制 第二篇:隔离级别和锁(1) SQL Server 并发控制 第三篇:隔离级别和行版本(2) 隔离级别定义事务处理数据读取操作的隔离...

osc_x5cptzgg
55分钟前
21
0
[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimen...

关于AJAX 同步请求(我没分了)_已解决_博问_博客园 https://q.cnblogs.com/q/70126/ jquery - JavaScript console.log causes error: "Synchronous XMLHttpRequest on the main thread is d......

osc_cxi2ewsx
56分钟前
29
0
python pip install指定国内源镜像

  有时候安装一些依赖包,网不好,直接超时,或者这个包就是死都下不下来的时候,可以指定国内源镜像。   pip install -i 国内镜像地址 包名   e.g. pip install -i http://mirrors.al...

osc_ym1l2qni
57分钟前
19
0
uniapp打包发版到linux服务器步骤----H5端

最近在写uni-app项目,项目打包部署到服务器后,搞了好一会一直打开是空白页,原来自己有几个地方疏忽了,现把步骤整理一下: 第1步:编辑配置 mainifest.json 文件 tip:运行的基础路径,我...

osc_2sv5yx4m
58分钟前
23
0
.NET Core微服务之基于Ocelot实现API网关服务(续)

Tip: 此篇已加入.NET Core微服务基础系列文章索引 一、负载均衡与请求缓存 1.1 负载均衡   为了验证负载均衡,这里我们配置了两个Consul Client节点,其中ClientService分别部署于这两个节...

osc_ho8dcqsx
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部