五大存储模型关系模型键值存储文档存储列式存储图形存储

simon麦田 simon麦田     2022-11-23     271

关键词:

数据库市场需要细分,行式数据库不再满足所有的需求,而有很多需求需要通过本内存数据库和列式数据库解决,列式数据库在数据分析、海量存储、BI这三个领域有自己独到。

1. 关系型数据库(行式数据库) MySQL Sybase Oracle

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

存储格式:行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。

例如以下的一个表:

EmpId Lastname Firstname Salary
1 Smith Joe 40000
2 Jones Mary 50000
3 Johnson Cathy 44000



 

1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;

特点:据以行相关的存储体系架构进行空间分配,主要适合与小批量的数据处理,常用于联机事务型数据处理。不能满足后面三个需求:对数据库高并发读写要求,对海量数据的高效率存储和访问需求,对数据库高可扩展性和高可用性。 一句话不适合分布式、高并发和海量。

2. 列式存储 Sybase IQ, C-Store, Vertica,Hbase

定义:什么是列式数据库?列式数据库是以列相关存储架构进行数据存储的数据库。列式存储以流的方式在列中存储所有的数据,主要适合与批量数据处理和即席查询。

存储格式 :

列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。

1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;

特点:包括查询快,由于查询需要读取的blocks少;数据压缩比高,正因为同一类型的列存储在一起。Load快。 简化数据建模的复杂性。但是插入更新慢,不太适合数据老是变化,它是按列存储的。这时候你就知道它适做DSS(决策支持系统),BI的优秀选择,数据集市,数据仓库,它不适合OLTP。

Examples are Sybase IQ, C-Store, Vertica, VectorWise,MonetDB, ParAccel, and Infobright.

具体请参考如下地址:http://en.wikipedia.org/wiki/Column-oriented_DBMS.

3. 键值存储 Cassandra, Hbase, Bigtable

即Key-Value存储,简称KV存储。它是NoSQL存储的一种方式。它的数据按照键值对的形式进行组织,索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。

典型例子 Sorted String Table即SSTable。其实STL 库中map和hash_map, JAVA中hash_table, hash_map就是键值存储。 但是他们值只支持内存操作,而且map的查询效率太低,关键是他们只是简单的数据结构,不能实现较大规模存储和分布式,而且数据的修改效率比较低。 而SSTalbe就解决了这些问题。

键值存储实际是分布式表格系统的一种。

分布式key-value 系统有cassandra, hbase, bigtable etc

注:其实Hbase也属于列式存储

4. 文档存储

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

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

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

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

MongoDB 对SQL 和ACID 支持的比较全面的数据库了。不过, 比较多的还是介绍日志的采集和存储,小文件的分布式存储,类似互联网微博应用的数据存储等方面的内容。

 

5.图形数据库

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

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

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

cglib动态代理

...在数据量和吞吐量要求等方面面临的挑战表明,关系数据存储经常成为瓶颈,从而对整体系统可扩展性施加限制。传统上,解决这个问题的方法只是购买一个更大的盒子(所谓的垂直可扩展性),但是在某些时候支付的价格变得... 查看详情

h5中五大存储方式

h5之前,存储主要是用cookies。cookies缺点有在请求头上带着数据,大小是4k之内。主Domain污染。主要应用:购物车、客户登录对于IE浏览器有UserData,大小是64k,只有IE浏览器支持。目标解决4k的大小问题解决请求头常带存储信息的问... 查看详情

关系数据库模型的存储结构采用啥形式

1.关系数据库模型的存储结构采用二维表格形式2.关系模型是1970年由E.F.Codd提出的。它和层次、网状模型相比,有以下特点:数据结构简单(二维表格)扎实的理论基础。关系运算理论关系模式设计理论3.关系模型:用二维表的形... 查看详情

NoSQL 数据建模

...1:00:42【问题描述】:我知道NoSQL中的各种数据模型是键值存储、图形存储、列存储和文档存储。我的问题是NoSQL中的数据建模和建模技术是否相同?【问题讨论】:【参考方案1】:所有类型的nosql数据库不一定相同。【讨论】: 查看详情

hbase的列式存储

为什么要选择列式存储  行式存储和列式存储主要是在物理存储的选择上面,这里主要是选择从实体的完整性角度进行存储,还是从实体特征维度进行存储,行式存储就是以实体为单位进行存储,在物理存储上,一个实体(的... 查看详情

NOSQLDB 类别..需要更多信息

...值,柱状,文档&图表我对HBase有个想法,它是一个列式存储NOSQLDB;它将数据存储在键值对中。但是什么是文档和图形类型?这两个也和NOSQLDB有关吗?请分享一些链接/详细信息,我可以从中获取更多关于文档和图形类型NOSQLD 查看详情

Django中存储在不同数据库中的模型之间可能存在关系吗?

】Django中存储在不同数据库中的模型之间可能存在关系吗?【英文标题】:It\'spossibletohaverelationshipsbetweenmodelsstoredindifferentdatabasesinDjango?【发布时间】:2021-12-1923:51:09【问题描述】:我目前正在处理一个项目,我同时处理公共和... 查看详情

如何与类型存储在 db 中的模型建立一对多关系

】如何与类型存储在db中的模型建立一对多关系【英文标题】:Howtoestablishaone-to-manyrelationshiptoamodelwhosetypeisstoredindb【发布时间】:2020-07-2419:34:00【问题描述】:我有一个如下所示的数据库:DatabaseGraphicalRepresentationdance_performer.perf... 查看详情

redis操作手册

...oSQL,泛指非关系型数据库,NoSQL数据库分为四大类:键值存储数据库(Redis,Voldemort,OracleBDB)、列存储数据库(HBase,Riak)、文档型数据库(CouchDB,MongoDB)、图形数据库(Neo4J,InfoGrid,InfiniteGraph)。2、非关系型数据库特点... 查看详情

hbase列式存储

行式存储行式存储是以行为单位存储,一行中的所有列代表一条记录。经常会出现一行数据中有多个列为空,行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。列式存储新型数... 查看详情

关系模型与 EAV

...:01【问题描述】:这里是数据库初学者。我一直在研究列存储模型,我找到了thispaper。它基本上提出了特殊的列存储模型来快速搜索稀疏和庞大的临床数据。我大体上理解这篇论文的建议,但是关于关系模型和EAV模型的一些想法... 查看详情

hbase是列式存储数据库吗

在介绍HBase是不是列式存储数据库之前,我们先来了解一下什么是行式数据库和列式数据库。行式数据库和列式数据库在维基百科里面,对行式数据库和列式数据库的定义为:列式数据库是以列相关存储架构进行数据存储的数据... 查看详情

hbase概念

...簇、时间戳建立索引2)构建在hdfs之上的分布式列式键值存储系统,hbase内部管理的文件存储在hdfs中。  2、有什么特点?1)不介意数据类型,允许动态的、灵活的数据模型,并不限制存储数据的种类。因此他可以自如的... 查看详情

redis都有哪些存储模式

...上榜不久,得分已经翻番,上升势头非常迅猛。3. 列式存储列式存储被视为NoSQL数据库中非常重要的一种模式,其中Cassandra流行度最高,它已经由Facebook转交给到Apache进行管理,同时Cassandra在全体数据库排名中排在第十位,紧随... 查看详情

AWS Redshift 列式存储与分布方式

】AWSRedshift列式存储与分布方式【英文标题】:AWSRedshiftcolumnarstoragevsdistributionstyle【发布时间】:2017-10-1918:21:01【问题描述】:我一直在查看AWS文档,但似乎无法理解分发方式的工作原理以及该数据如何存储在Redshift上。我了解... 查看详情

hbase

HBase简介:分布式数据库是构建在HDFS上的分布式列存储数据库(Mysql,Oracle是行数据库),是一个高可靠性,高性能,面向列。可伸缩的分布式存储系统列式存储允许用户存储海量的数据到相同表中,而在传统数据库中,海量数... 查看详情

具有单个持久存储协调器的多个数据模型

】具有单个持久存储协调器的多个数据模型【英文标题】:Multipledatamodelswithsinglepersistentstorecoordinator【发布时间】:2015-11-0316:36:41【问题描述】:我继承了一个使用CoreData的iOS项目。这个项目有8种不同的数据模型,不用说项目没... 查看详情

在 Google Cloud Storage 中存储像数据一样的键值

】在GoogleCloudStorage中存储像数据一样的键值【英文标题】:StoringKeyValueLikeDatainGoogleCloudStorage【发布时间】:2018-01-0106:04:37【问题描述】:由于GoogleCloudStorage支持对象更改通知,因此它适用于丰富对象的良好编程模型,该模型可... 查看详情