按照存储模型来说分为以下4类。

  • 键值存储
  • 列式存储
  • 文档存储
  • 图形存储

键值模型

键值数据模型的主要思想来自于哈希表:在哈希表中有一个特定的key和一个value指针,指向特定的数据。键值模型对于海量数据存储系统来说,最大的优势在于数据模型简单,易于实现,非常适合通过key对数据进行查询和修改等操作。但是若对整个海量数据存储系统需要更侧重于批量数据的查询,更新操作,键值数据模型则在效率上处于明显的不足。同样的,键值存储不支持特别复杂逻辑的数据操作。

1)Redis

Redis在本质上是一个键值模型的内存数据库,整个数据库加载在内存中进行数据操作,并定期通过异步操作把数据库数据写回到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作。Redis的出色之处不仅仅是性能,其最大特色是支持诸如链表和集合这样的复杂数据结构,而且还支持对链表进行各种操作。

主要缺点是:数据库容量受到物理内存的限制,不能简单地用作大量数据的高性能读写,而且他没有原生的可扩展机制,不具有可扩展能力,要依赖于客户端来实现分布式读写。因此,Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
redis数据结构底层原理可以参考:redis底层原理

2)Dynamo

Dynamo是Amazon提出的一个分布式键值存储系统,它具有高度可用,可升级的分布式数据存储中心。Dynamo是一个动态自适配的分布式系统。存储节点可以简单地从Dynamo上添加和删除,而不需要任何人工的划分和重新分配。

作为一个商业应用,Dynamo并没有公开技术文档和源代码。了解更多可以参考:Amazon Dynamo系统架构

列式存储

列式存储主要使用类似于表这样的传统数据模型,但是它并不支持类似表连接这样的多表操作,它的主要特点是在存储数据时,主要围绕着列,而不像传统的关系型db那样根据行进行存储。也就是说,属于同一列的数据尽可能的存储在硬盘同一页中,而不是将属于同一行的数据存放在一起,这样将会节省大量的I/O操作。

大多数列式数据库都支持”列族“这个特性,所谓列族即将多个列并为一个组。总之,这种数据模型的优点是比较适合数据分析和数据仓库这类需要迅速查找且数据量大的应用。

1)BigTable

Bigtable是一个为管理大规模结构化数据而设计的分布式存储系统,可以扩展到PB级数据和上千台服务器。
本质上说,Bigtable是一个键值(key-value)映射。按作者的说法,Bigtable是一个稀疏的,分布式的,持久化的,多维的排序映射。

来看看多维、排序、映射。Bigtable的键有三维,分别是行键(row key)、列键(column key)和时间戳(timestamp),行键和列键都是字节串,时间戳是64位整型;而值是一个字节串。可以用 (row:string, column:string, time:int64)→string 来表示一条键值对记录。

例子:

table{  // ...  "aaaaa" : { //一行  "A:foo" : { //一列  15 : "y", //一个版本  4 : "m"  },  "A:bar" : { //一列  15 : "d",  },  "B:" : { //一列  6 : "w"  3 : "o"  1 : "w"  }  },  // ...
}  

查询时,如果只给出行列,那么返回的是最新版本的数据;如果给出了行列时间戳,那么返回的是时间小于或等于时间戳的数据。比如,我们查询”aaaaa”/”A:foo”,返回的值是”y”;查询”aaaaa”/”A:foo”/10,返回的结果就是”m”;查询”aaaaa”/”A:foo”/2,返回的结果是空。

2)Cassandra与Hbase

Cassandra项目是Facebook于2008年开发出来的。Hbase全称为Hadoop Database,是一个构建在Apache Hadoop上的 列式数据库。Hbase有很好的扩展性,被认为是Bigtable的一个克隆,可以存储数以亿计的行。

Cassandra和Hbase的数据模型都借鉴自google的bigtable:每一行数据的各项被存储在不同的列中,这些列的集合称为列族。而每一列中每一个数据都包含一个时间戳属性,这样列中的同一个数据项的多个版本都能保存下来。

文档存储

文档存储的目标是在键值存储方式(提供高性能和高伸缩性)和传统的关系数据系统(丰富的功能)之间架起一个桥梁,集两者的优势于一身。其数据主要以JSON或者类JSON格式的文档来进行存储,是有语义的。文档型数据库可以看做是键值数据库的升级版,允许在存储的值中再嵌套键值,且文档存储模型一般可以对其值创建索引方便上层应用,而这一点是普通键值数据库无法支持的。

1)MongoDB

MongoDB是一种可扩展,高性能,开源的面相文档的数据库,采用c++开发。它介于关系数据库和非关系数据库之间。MongoDB支持的数据结构非常松散,是类似JSON的BJSON格式,因此可以存储比较复杂的数据类型。其最大特点是支持的查询语言非常强大,其语法有点类似于面向对象的查询语言。

它只要解决的是海量数据的访问效率问题,当数据量达到50G以上时,他的数据库访问速度是MySQL的10倍以上。
了解更多看可以查看:图解MongoDB原理

2)CouchDB

CouchDB是Apache组织发布的一款NoSQL开源数据库项目,是面向文档数据类型的Nosql,它由Enlang编写而成,使用JSON格式保存数据。他的数据结构很简单,字段只有三个:文档ID,文档版本号和内容。

它的优势在于:他的数据存储格式是JSON,而JSON作为一种文本数据可以广泛用于多种语言模块之间的数据传递,便于学习。

图形存储

采用图结构存储数据可以应用图论算法进行各种复杂的算法,如最短路径,集中度测量等。

1)Neo4J

它是一个嵌入式,基于磁盘的,支持完整实物的JAVA持久化引擎。它采用图结构而不是表结构存储数据。Neo4J可以支持大规模可扩展性,在一台机器上可以处理数10亿节点,关系或者属性的图形结构,也可以扩展到多台机器并行运行。

图形数据库善于处理大量复杂,互连结,低结构的数据。这些数据变化迅速,需要频繁的查询。它重要解决传统关系数据库在查询时需要进行大量表连接而出现性能衰退的问题。
了解更多可以查看:neo4j-底层存储结构分析

2)GraphDB

GraphDB是2007年Sones公司开发的一款企业图形数据存储系统。它使用c#开发。GraphDB的一大优势是善于处理一类特定的问题:数据集包含了大量的关系,处理这些数据时需要快速高效的遍历这些关系。

数据库存储模型-数据存储相关推荐

  1. FlashDB嵌入式数据库之TSDB数据存储解析

    一.驱动层:SFUD(Serial Flash Universal Driver) 是一款开源的串行 SPI Flash 通用驱动库 二.中间层:FAL(FLASH ABSTRACTION LAYER ...

  2. 数据库技术:数据存储和查询知识笔记

    1.存储管理器 存储管理器作用:负责数据库中数据的存查询和更新.存储管理器负责和文件系统交互,将不同的DML语句翻译成底层文件系统命令,通过这种方式原始数据就通过文件系统存储在磁盘上. 存储管理器是存 ...

  3. flutter可以用 mysql数据库_Flutter 本地数据存储(文件、SharedPreferences 、数据库 sqlite)使用示例...

    Flutter 提供了三种数据持久化方法,即文件.SharedPreferences 与数据库. 文件 Flutter 提供了两种文件存储的目录,即临时(Temporary)目录与文档(Documen ...

  4. graphite 数据库_大数据存储和分析-IBM DB2和Graphite

    在本文中,我们将结合IBM™Persistence API使用IBM DB2作为数据源,描述PCC系统中的数据存储. 此外,我们讨论了如何使用Graphite来检测代码库和工作负载. 最后,我们描述了 ...

  5. android+默认存储,Android 数据存储之SP存储,内部存储,外部存储

    Android 数据存储之SP存储,内部存储,外部存储 Android提供了多种数据存储的技术来永久的保存应用数据,以便于开发者能够根据自己的需求来选择合适的数据存储方案,主要有SharedPrefe ...

  6. emqtt数据存储mysql,数据存储 - MongoDB 消息存储 - 《EMQ X Enterprise v3.0 中文文档》 - 书栈网 · BookStack...

    MongoDB 消息存储 配置 MongoDB 消息存储 配置文件: emqx_backend_mongo.conf 配置 MongoDB 服务器 支持配置多台 MongoDB 服务器连接池:## M ...

  7. android之数据存储,Android数据存储之File

    Android使用与其他平台类似的基于磁盘文件系统(disk-based file systems),上篇文章通过SharedPerference来进行数据存储,这次可以使用File.File 对象非 ...

  8. gps数据存储mysql_gps数据存储mysql

    gps数据存储mysql 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Servi ...

  9. python存储-Python数据存储之 h5py详解

    1.Python数据存储(压缩) (1)numpy.save , numpy.savez , scipy.io.savemat numpy和scipy内建的数据存储方式. (2)cPickle + g ...

最新文章

  1. php批量导出pdf文件大小,php完美导出pdf,pdf合并批量导出
  2. 挂起和阻塞区别以及sleep和wait的区别
  3. 解决在使用numpy.polyfit 时出现的 raise LinAlgError(“SVD did not converge in Linear Least Squares“)错误
  4. CSS margin详解
  5. 怎么查看oracle数据库数据量大小?
  6. GIT_Error: Agent admitted failure to sign —— Permission denied (publickey).
  7. SQL(一)- 数据库介绍与基础操作
  8. ./configure会报错:pr command not found
  9. 序列上问题(逆元+整数快速幂)
  10. 结合上下文和篇章特征的多标签情绪分类
  11. 已支持macOS Big Sur 的apple App更新列表
  12. iso硬盘安装 凤凰os_Phoenix OS硬盘版|凤凰系统x86硬盘版下载 v2.5.0正式版 附安装教程 - 121下载站...
  13. 华硕 tuf b360 efi_技嘉小雕、微星迫击炮、华硕电竞特工三款主板对比
  14. 一文搞懂Handler机制原理
  15. Delphi7--运算符和表达式
  16. iOS解决“The ‘Pods-XXX‘ target has transitive dependencies that include statically linked binaries”报错
  17. uniapp + vue3微信小程序开发(6)地图展示
  18. 3种方法教你应对高智商型反社会人格者
  19. 世界上最快的计算机-泰坦和天河二号
  20. 跨境电商卖家应该知道的3个社交媒体营销策略

热门文章

  1. Kafka设计解析(五): Kafka Consumer设计解析
  2. Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
  3. 高级数据结构与算法 | 哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶
  4. C语言程序设计 | 指针的进阶(一):字符指针、数组指针、指针数组、函数指针
  5. Python中可变类型和不可变类型的数据?
  6. 从C10K到C10M高性能网络的探索与实践
  7. Django视图(三)
  8. shell编程之条件判断语句和流程控制语句
  9. 智能制作,是我们改变时代的机会——阿里云视频云的理想与未来
  10. 杨攀:融云专注极致技术 不忘初心打造极简体验