一、数据模型及操作模型
a) Key存储
Key-Value存储
最简单的结构。
Key – 结构化数据 存储
Key对应结构化数据存储,其典型代表是Redis,Redis将Key-Value存储的Value变成了结构化的数据类型。Value的类型包括数字、字符串、列表、集合以及有序集合,可对复杂数据类型进行操作。
Key – 文档 存储
Key – 文档存储的代表有CouchDB、MongoDB和Riak。这种存储方式下Key-Value的Value是结构化的文档,通常这些文档是被转换成JSON或者类似于JSON的结构进行存储。
BigTable 的列簇式存储
HBase和Cassandra的数据模型都借鉴了Google 的BigTable。这种数据模型的特点是列式存储,每一行数据的各项被存储在不同的列中(这些列的集合称作列簇)。而每一列中每一个数据都包含一个时间戳属性,这样列中的同一个数据项的多个版本都能保存下来。
b) 图结构存储
Neo4j和HyperGraphDB是当前最流行的图结构数据库。
总特点:Schema-free的存储,动态增加属性。
二、横向扩展
横向扩展的目标是达到线性的效果,即如果增加一倍的机器,那么负载能力应该也能相应的增加一倍。其主要需要解决的问题是数据在多台机器间分布。主要通过数据分片和分区。
a) 分片策略
分片的意思是,没有任何一台机器可以处理所有读写请求。很多NoSQL系统都是基于键值模型的,基本不会有对整个数据进行查询的时候,因此分片通常也基于数据的键来做:键的一些属性会决定这个键值对存储在哪台机器上。
数据分片在Cassandra、HBase、Voldemort和Riak等都有实现,最近MongoDB和Redis也在做相应的实现。而有的并不提供内置的分片支持,比如CouchDB更加注重单机性能的提升。通常借助其它的技术在上层来进行负载分配。
i. 协调器进行数据分片
CouchDB专注于单机性能,于是出现了协调器Lounge 和 BigCouch,通过提供一个proxy层来对CouchDB中的数据进行分片。proxy作为CouchDB集群的前端机器,接受和分配请求。后端的CouchDB 之间并没有交互。协调器会将按操作的key值将请求分配到下层的具体某台机器。
Twitter 实现了一个叫Gizzard的协调器,可以实现数据分片和备份功能。Gizzard不关心数据类型,它使用树结构来存储数据范围标识。
ii. 一致性hash环算法
Hash算法要保证数据的均匀分布。比如Cassandra、Voldemort和Riak,基本上都使用了一致性hash算法。
hash环
一致性hash原理: hash函数H,可以通过数据的key值计算出一个hash值。我们将整个hash环的范围定义为[1,L]这个区间,将刚才算出的hash值对L进行取余,就能算出一个key值在这个环上的位置。而每一台真实服务器结点就会负责[1-L]之间的某个区间的数据。如上图,就是一个五个结点的hash环。
数据冗余容错:一般通过冗余保证节点的fail-over,hash环中一般顺序保存,例如冗余系数为3,那么A节点的数据会在ABC节点上保存。A节点出现故障, B,C节点就能处理这部分数据的请求。
解决数据不均:虚拟节点映射,例如将A节点映射为A_1,A_2, A_3, A_4,4个节点,使Hash分布更加均匀。
a) 连续范围分区策略
相对于按照单个的key进行的分片,连续范围分区就是对一段key进行分片。
类似一致性hash,连续范围分区会把key值按连续的范围分段,每段数据会保存在某个节点上,然后会被冗余备份到其它的节点,通过一份映射关系表,记录哪一段key值对应存在哪台机器上。和一致性hash不同的是,连续范围分区使得key值上相邻的两个数据在存储上也基本上是在同一个数据段。
BigTable的连续范围分区:
BigTable 将数据切分成tablet数据块。每个tablet保存一定数量的键值对。然后每个Tablet 服务器会存储多个tablet块,每个tablet大概100-200MB大。如果tablet的数据大小变化, master机器会动态地调整tablet,合并和分裂,以及在各个机器上的分布。
master服务器会把 tablet 的归属关系存在元数据表里。元数据实际上也是被切分成tablet保存在tablet服务器中的。这样整个数据存储就被分成了如上图的三层模型。
HBase,MongoDB, Twitter的Gizzard借鉴了BigTable的分层理论来实现范围分区策略。
MongoDB用几台配置机器组成集群来管理数据的分布。这几台机器保存着相同的配置信息,实际上同时扮演了master的路由角色及Chubby 的角色。
Cassandra 提供了一个有序的分区表。Cassandra也使用了一致性hash算法进行数据分配,不同的是,它不是按单条数据进行hash,而是对一段范围内的数据进行hash,也就是说20号数据和21号数据基本上会被分配在同一台机器节点上。
hash分区:
优点:对数据一次hash就能确定节点位置,可以通过虚拟节点解决数据分布不均。
缺点:范围查询需要在多台机器上进行。节点故障时可能造成相邻节点负载飙升。
连续范围分区:
连续优点:可以对数据进行顺序和范围查询。
缺点:每次查询需要查找配置信息里的映射表,找到相应的数据段。另外配置节点是个故障单点。
三、 故障处理
BigTable中,master机器是一个单点,系统只能容忍短时间的master故障。如果tablet 服务器故障,那么master可以把对其上tablet的所有请求分配到其它机器节点。
为了监测和处理节点故障,BigTable实现了Chubby的模块,Chubby是一个分布式的锁系统,用于管理集群成员及检测各成员是否存活。ZooKeeper是Chubby的一个开源实现,有很多基于 Hadoop 的项目都使用它来进行二级master和tablet节点的调度。
Gossip
类Dynamo 应用都采用了Dynamo文档中说到的一种古老的方法:Gossip。通过这个方法,节点间能够互相保持联系并能够检测到故障节点。其具体做法是,每隔一段时间(比如一秒),一个节点就会随便找一个曾经有过通信的节点与其交换一下其它节点的健康状态。
四、事务机制
NoSQL系统通常注重性能和扩展性,而非事务机制,对性能的考虑远在ACID的保证之上。通常NoSQL系统仅提供对行级别的原子性保证,也就是说同时对同一个Key下的数据进行的两个操作,在实际执行的时候是会串行的执行,保证了每一个Key-Value对不会被破坏。
五、 一致性
分布式系统CAP理论,一致性,可用性和分区容错不可能全部达到,导致一般的NOSQL模型为最终一致性或者强一致性。例如HBASE通过底层的HDFS来保证数据强一致性,像Voldemort,Cassandra和Riak这些类Dynamo的系统,允许用户在强一致性和最终一致性之间自由选择。当然也有其他的选择,例如Yahoo的PNUTS中,采用的就是松散的一致性和弱可用性结合的方法。强一致性需要对数据进行同步,降低性能。
最终一致性:
1、数据版本控制与冲突
由于同一份数据在不同的节点可能存在不同值,对数据的版本控制和冲突监测就变得尤为重要。类Dynamo的系统通常都使用了一种叫vector clock(向量时钟)的同步机制
2、读时修复
在数据读取时,如果有R个节点返回了一致的数据,那么协调器就可以认为这个值是正确的并返回给客户端了。但是在总共返回的N个值中,如果协调器发现有的数据不是最新的。那么它可以通过读时修复机制来对这些节点进行处理。这种方式在Dynamo中有描述,在Voldemort 、Cassandra和Riak中都得到了实现。当协调器发现有的节点数据不是最新时,它会在数据不一致的节点间启动一个冲突解决过程。
附录
NOSQLFAN网站:http://blog.nosqlfan.com/newslist
NOSQL Notes博客:http://www.nosqlnotes.net/archives/category/精通架构
经典文章NOSQL漫谈:http://sebug.net/paper/databases/nosql/Nosql.html
这几个是搜到的比较好的网站和文章
相关推荐
【标题】"毕业论文-web系统文献综述(网上书店系统)" 涉及的主要知识点是Web系统的开发与设计,特别是针对网上书店这一特定...文献综述正是这样一个过程,它总结了现有的研究成果,为后续的系统设计和实现提供理论支持。
每篇论文综述都会对选定主题进行深入研究,总结现有研究成果,指出存在的问题,提出改进的建议或未来的研究方向。通过阅读这些综述,读者可以了解计算机科学的最新进展,为自己的研究提供参考和启示。此外,撰写论文...
2. **文献综述**:通过查阅相关文献,总结前人研究的成果和不足,为自己的研究定位。"基于WEB的毕业设计选题系统开发"可能涉及到网页设计、数据库管理、用户交互设计等领域的研究进展,需要对比分析不同方案的优劣。...
### 大数据技术综述 #### 一、大数据的发展背景及定义 随着信息技术的迅猛发展,我们已经迈入了一个全新的“大数据”时代。在这个时代,数据的产生速度、规模和复杂性都达到了前所未有的水平。从社交媒体到电子...
总结来说,互联网大数据文献综述涵盖了大数据分析的最新趋势和技术,包括硬件平台的演进、软件技术的发展、分布式系统的应用以及在各个领域的实践。随着数据规模的持续增长,大数据分析将继续推动信息技术领域的创新...
总结而言,互联网海量数据存储及处理的技术发展趋势主要包括分布式存储、NoSQL数据库、大数据处理框架和实时数据处理技术。随着互联网应用的持续创新和数据量的进一步增长,这些领域的研究和实践将继续深入,以应对...
2. 存储技术:涉及结构化、非结构化和半结构化数据的处理,如关系数据库、NoSQL和云存储等。 3. 大数据技术:以Hadoop为代表的分布式计算框架,包括数据采集、存取和结果展现,如ETL工具、分布式文件系统和云计算。 ...
总结,大数据已成为当今社会的关键驱动力,它的理论、技术及应用不断演进,对于科学研究、商业决策和社会进步具有深远影响。随着技术的进步,我们期待大数据能带来更多的价值创造和智能解决方案。
这篇综述文章“支撑机器学习的数据管理技术综述”探讨了在机器学习背景下,数据管理技术的关键应用、优势和挑战。 首先,文章强调了应用驱动创新的重要性,指出数据库技术的发展往往是为了满足不断变化的应用需求。...
【互联网海量数据存储及处理调研综述】 互联网的飞速发展催生了前所未有的海量数据,这些数据涵盖了社交媒体、在线视频、图像共享、电子商务等多个领域。面对这种信息爆炸的时代,如何有效地存储和处理这些数据成为...
大数据存储通常依赖于分布式文件系统(如HDFS)和NoSQL数据库,这些系统设计用于扩展到大规模集群,以处理PB级别的数据。数据管理涉及数据清洗、集成和预处理,确保数据的质量和一致性。数据分析则涵盖机器学习、...
总结起来,大数据背景下的信息资源管理需要新的技术和策略,以应对数据的海量、多样性和高速度。这包括了对大数据的理解、存储、管理和分析,以及隐私保护和安全策略的实施。随着大数据技术的不断进步,信息资源管理...
标题中的“基于Hadoop的大数据处理关键技术综述”揭示了我们即将探讨的主题是关于使用Hadoop框架进行大数据处理的关键技术。Hadoop是一个开源项目,由Apache软件基金会维护,旨在提供分布式存储和计算的能力,以便...
### 智能计算重要知识点总结 #### 一、FPGA的演进与发展 - **定义与起源**:FPGA(Field Programmable Gate Array),即现场可编程门阵列,是一种半导体器件,属于专用集成电路(ASIC)领域的半定制电路产品。它在...
#### 实验综述 本次实验旨在深入学习MongoDB的分片机制,理解并掌握如何部署一个基于多服务器的MongoDB分片集群。分片是MongoDB的一项重要特性,它允许将数据分散存储在多个物理服务器上,从而提高系统的可扩展性和...
Hadoop生态系统还包括其他重要工具,如Hive(数据仓库工具)、Pig(高级数据分析语言)、HBase(NoSQL数据库)和Spark(快速、通用的分布式计算系统)。Hive提供了一种SQL-like查询语言(HQL),使得非程序员也能...
在文献综述中,介绍了分布式系统相关的根本理论,分析了一些典型的Nosql系统,综述了在单机软件成熟的升级方案以及在分布式系统升级问题上前人的一些研究成果。 在难点分析及总体设计中,系统地分析了分布式系统...
除了技术分析和应用案例,文章还对国内外在海量天文数据存储管理方面进行的研究现状进行了综述,强调了在天文领域中存储管理问题的重要性,并指出分布式文件系统Hadoop和其他相关技术的使用情况。 文章还提到了在...