本章主要深入探究磁盘存储与内存存储在大数据架构中的应用。分别讲解磁盘存储设备和内存存储设备。这一章体量略大,分两篇来写。
1. 磁盘存储设备
磁盘存储方式通常是指用低成本的硬盘进行长期存储。磁盘存储可应用于分布式文件系统或数据库中。
1)分布式文件系统
分布式文件系统提供的是一种无预定义结构的存储,由于可将数据复制到多个存储地点,其具有高可用性。分布式文件系统中可存储非关系型数据库,例如半结构化或非结构化数据(对应无预定义结构存储方式),为满足大数据的“velocity”特征,其具有快速读写能力。
分布式文件系统不适合存储大量的小文件,因为这会带来过多的磁盘搜索行为(disk-seek activity),减慢整体的数据获取速度,也会带来过多的同时处理多个更小文件的系统开销。也就是说,分布式文件系统更适用于存储更少量,更大的文件。多个小文件通常被组合成大文件进行优化存储和处理。
2)RDBMS数据库
关系型数据库管理系统适于处理事务型的工作量,包括伴有随机读写操作的小量数据。关系型数据库管理系统遵循ACID原理(详见《大数据导论》读书笔记——Chapter 5),通常只有一个节点(这里可理解为只有一个存储节点,后面会描述到有多个处理节点,一个存储节点的场景),因此不支持像分布式文件系统中提供的那种冗余性和容错性。
为了能够处理大量数据快速读写,关系型数据库也需要扩充,RDBMS采取纵向扩充而不是横向扩充,这是一种成本更高的扩充方式,基于这种情况,RDBMS相对于分布式文件系统来说,不太适合长期存储日益累积的数据。(数据随时间不断积累,RDBMS就需要不断扩充,而这种扩充相对于分布式文件系统来说,成本更高,所以不适合。)
但需要注意的是,一些关系型数据库,例如IBM DB2 pureScale、Sybase ASE Cluster Edition、Oracle Real Application Clusters (RAC)和Microsoft Parallel Data Warehouse(PDW),可在多个集群上运行,但多个集群共享同一个存储设备。(也就是多个处理节点,一个存储节点的场景。)
关系型数据库需要手动分片,通常采用一个应用逻辑(application logic),这个应用逻辑主要用于定位数据在哪个分片上。如下图中的场景,用户需要读取id为1和3的数据,application logic定位所需读取的数据分别在分片A和分片B上。
关系型数据库通常要求数据具有一定结构,故不直接支持半结构化和非结构化数据存储。这种对结构的要求会在插入或更新数据时,增加检查数据的工作量,降低系统的处理效率。这一特点使关系型数据库不适用于高速、大量数据处理的场景,正是由于这一局限性,传统的RDBMS通常不被用于大数据场景中的主要存储设备。
3)NoSQL数据库
Not-only SQL(NoSQL)指具有高可扩展和容错性的下一代非关系型数据库相关技术。
A.特征:
用于区分与关系型RDBMS的不同,但不是所有的NoSQL存储设备都有以下全部特征。
a)结构灵活(无预定义结构)——数据可以其原始状态被存储
b)scale out(横向扩展)而不是scale up(纵向扩展)——对于NoSQL数据库,可以通过增加节点的方式来扩充存储空间,而不是通过用更高性能或容量的节点来替换现有节点的方式。
c)高可用性——建立在提供容错性的集群技术基础上。
d)低操作成本——许多NoSQL数据库建立在开源平台上,没有版权许可成本,并可被部署在商用硬件上。
e)最终一致性——数据从多个节点上读取,虽然不会在一次写入操作后立即同步,但所有节点最终会达到一致的状态。
f)遵从BASE原理,而不是ACID原理——遵从BASE原理要求数据库在网络或节点故障时,维持高可用性,而不要求数据库的强一致性。数据库在达到最终一致性之前,可处于软一致性或非一致性的状态。因此,对于CAP定理,NoSQL数据库通常选择满足AP或CP。
g)API驱动的数据接入——数据接入通常通过基于API的查询,包括RESTful API等,一些实现方式可支持类SQL查询。
h)自动分片及复制——主要用于支持横向扩展性及提供高可用性。NoSQL存储设备自动进行分片和复制,将数据集横向拆分,并复制到多个节点。
i)互相协调的缓存——这种特性使NoSQL数据库不需要第三方分布式缓存系统,例如Memcached。
j)分布式查询支持——NoSQL存储设备在多个分片上保持一致性的查询行为。
k)混合持久性——使用NoSQL数据库并不意味着不用传统RDBMS,事实上,可以同时选用NoSQL数据库和RDBMS数据库,也就是具有混合持久性,在同样的解决方案结构中使用不同类型的存储技术,这种方式可同时支持结构化数据和半/非结构化数据。
l)聚合——关系型数据库对于完全标准化的数据处理非常高效。与关系型数据库不同,NoSQL数据库可存储非标准化聚合数据(包含融合、嵌套数据的实体),无需在数据库中的应用对象和数据之间进行连接或扩展映射。
B.理论基础
NoSQL数据存储设备的出现可归结于大数据的volume、velocity和variety特征。
a)Volume(数据量大)
为降低成本保持商业竞争力,增长的数据量需要高可扩展性的存储设备。NoSQL存储设备具有横向扩展能力,可满足这一需求,无需昂贵的设备。
b)Velocity(速度快时效高)
快速数据流需要具有快速存储写入能力的数据库NoSQL存储设备采用schema-on-read而不是schema-on-write原理,使快速存储写入操作成为可能。NoSQL数据存储设备有着高可用性,可确保节点或网络故障时不出现写入延时。
c)Variety(类型繁多)
存储设备需要处理多种数据类型,包括文件、email、图像、视频以及其他不完整的数据。NoSQL数据存储设备能够存储这些不同的数据类型,包括半结构化数据和非结构化数据。同时,当数据模型随数据集的变化而演变时,NoSQL存储设备能够存储无定义结构的数据和不完整的数据并随之对这些数据的结构进行改变。也就是说,NoSQL数据库支持数据结构演变。
C.类型
基于存储数据类型和方式的不同,NoSQL存储设备被分为四种类型:键值存储、文档存储、列簇存储、图存储。
D.键值存储
键值存储设备以键值对(key-value pair)形式存储数据,如同哈希表,表是由value列组成,每个value由key来区分。键值存储设备通常不保存索引,所以写入操作速度较快,键值存储设备基于简单的存储模型,具有高可扩展性。
键值存储设备可在一个表中存储多种数据类型,如下图:
适用键值存储设备的场景:
a)非结构化数据存储;
b)高性能数据读写需求;
c)value只由key来区分;
d)每个value都是独立的个体,不需要依赖其他value;
e)所有value都一个相对简单的结构;
f)数据操作方式相对简单,包括插入、选择、删除等操作;
g)在应用层对存储的value进行操作。
不适用键值存储设备的场景:
a)在搜索或过滤数据时需要使用value的多个属性;
b)在不同的键值对之间存在关联关系;
c)需要在一次事务中同时更新多个键值对;
d)需要在一次操作中同时操作多个键值对;
e)在不同的value中需要保持数据结构的一致性;
f)需要同时更新一个value 的多个属性。
E.文档存储
文档存储设备通常也以键值对的形式存储数据。与键值存储设备不同的是,value是以文档的形式存储,并且能够被在数据库中查询。这些文档有着复杂的嵌套结构,例如下图:
文档可为文本类型(例如XML或JSON)或二进制类型(例如BSON),在同一个表中,每个文档可以有不同的结构。
适用文档存储设备的场景:
a)存储包含扁平或嵌套结构的半结构化文档数据;
b)文档结构未知或需要变化时;
c)需要对存储的文档做部分更新时;
d)在文档的不同字段同时进行搜索时;
e)需在序列对象表中存储域名对象;
f)数据操作方式包括插入、选择、更新和删除。
不适用文档存储设备的场景:
a)在一次事务中需要同时对多个文档进行更新;
b)在一次操作中需要对多个文档进行联合操作;
c)文件结构在连续查询中改变,需要重建查询;
d)存储的数据不是自描述的,并且没有结构参考。
文档存储包括MongoDB、CouchDB、和Terrastore。
F.列簇存储
列簇存储设备保存数据非常类似传统的RDBMS,与之不同的是,每列是相关的几列的组,成为一个超级列,如下图:
每个超级列可包括任意数量的相关列,作为一个统一的组进行检索或更新。每一行包括多个超级列,并可有不同的列集,支持灵活的结构,每一行有一个key。列簇存储设备支持有随机读写能力的快速数据接入,在分离的物理文件中存储不同的列簇,加快查询响应。
适用列簇存储设备的场景:
a)需要实时随机读写能力,并且数据有定义的结构;
b)数据有着扁平结构,每一行包括多个列和相互关联数据嵌套的组;
c)支持结构变化,列簇可被增加或删除,不会造成系统故障;
d)一些字段被同时通过字段名来查询;
e)当数据包含少量列时,要求存储的高效使用:只当列簇存在时,列簇数据库指定存储空间,当列簇为空时,不指定存储空间;
f)数据操作方式包括插入、选择、更新和删除。
不适用列簇存储设备的场景:
a)要求关联性的数据接入,例如:数据间的连接;
b)需要满足ACID原理;
c)需要存储二进制数据;
d)需要进行SQL兼容性查询;
e)查询方式需要频繁改变。
列簇存储包括Cassandra、HBase和Amazon SimpleDB。
G.图存储
图存储设备用于保存内部互相关联的实体。与其他NoSQL存储设备不同,图存储设备关注实体的结构,并存储实体间的关联关系。
实体被存储在节点中(这里的“节点”不同于集群“节点”),这里的节点也被叫做vertices,实体间的关联关系被存储为edges。在RDBMS中,每个节点可被理解为单独的一行,而在图存储中,每个edge能够定义多个节点的关联关系。多个节点之间可以有多种关联关系,这些关联关系被存储在多个edge中。图存储中的查询基于节点属性和/或节点之间的关联关系,也就是edge。edge可以是单方向的或多方向的,定义了节点查询中节点遍历的方向。通常,图存储设备遵循ACID原理。
图存储设备的可利用程度取决于节点之间edge的数目和类型,edge的数目和类型越多,图存储设备能够处理的查询类型越多。
图存储设备中可以增加新类型的节点,也可以增加节点之间新的关联关系,而不改变数据库结构。
适用图存储设备的场景:
a)需要存储相互关联的实体;
b)需要通过实体之间的关系进行查询;
c)需要查询相关实体的群组;
d)需要查询实体的关联关系;
e)通过视图来进行数据挖掘。
不适用图存储设备的场景:
a)大量的实体属性或实体间的关联关系需要被同时更新;
b)实体有较多的属性或嵌套的数据;
c)需要通过实体属性或关联关系属性来查询实体。
图存储包括Neo4J、Infinite Graph和OrientDB。
4)NewSQL数据库
NoSQL存储设备具有高可扩展性、可用性、容错性和快速读写能力,遵从BASE原理,满足最终一致性而不是即时一致性,所以存在到达最终一致性之前的软状态。所以,NoSQL数据库不适用于大规模事务型系统(事务型系统对即时一致性的要求较高)。
NewSQL存储设备集RDBMS的ACID特征与NoSQL存储设备的可扩展性和容错性于一体。NewSQL数据库通常支持SQL标准语法,并在数据存储中采用逻辑关系数据模型。
NewSQL数据库可以被用于有着大量事务型业务的OLTP系统,例如银行系统;也可被用于实时分析,一些分析可在内存中进行。
NewSQL存储设备既提供类似传统RDBMS相对简单的事务型操作,也提供高可扩展性数据库,支持SQL标准语法。
NewSQL数据库的例子有VoltDB、NuoDB和InnoDB。
相关文章:
《大数据导论》读书笔记——Chapter 1
《大数据导论》读书笔记——Chapter 2
Big Data Adoption and Planning Consideration
《大数据导论》读书笔记——Chapter 4
《大数据导论》读书笔记——Chapter 5
《大数据导论》读书笔记——Chapter 6
慢火烹茶看图说话——铁路&民航
慢火烹茶看图说话——国语&粤语
慢火烹茶看图说话——2018北京春夏赏花小贴士
END
长按二维码关注