NoSQL数据库总结
- 格式:doc
- 大小:66.50 KB
- 文档页数:7
大数据的存储技术随着互联网的快速发展和应用范围的不断扩大,大数据已经成为了互联网时代的主要特征之一。
然而,大数据的存储、处理和分析需要强大的技术支持。
本文将重点讨论大数据的存储技术,包括传统的存储技术和最新的存储技术,如分布式文件系统、NoSQL数据库和大数据存储平台等。
一、传统的存储技术在大数据存储技术的发展过程中,传统的存储技术总是扮演着重要的角色。
传统的存储技术主要包括关系型数据库和文件系统。
1、关系型数据库关系型数据库是传统的数据库存储技术,它采用表格的方式来存储数据,支持SQL查询语言,具有成熟、稳定、易用等特点。
关系型数据库包括MySQL、Oracle、SQL Server等,它们在企业信息系统和金融系统中得到广泛应用。
然而,关系型数据库在存储大数据时存在着一些问题,比如性能瓶颈、扩展性差、成本高等。
2、文件系统文件系统是用于存储和管理文件的系统软件,它是操作系统的一部分,用于将文件存储到硬盘或其他存储设备上。
常见的文件系统包括NTFS、FAT32、EXT4等。
文件系统广泛应用于个人电脑、服务器和嵌入式系统中,但它在存储大数据时面临着诸多挑战,比如单点故障、扩展性差、性能瓶颈等。
二、分布式文件系统为了解决传统存储技术的问题,分布式文件系统应运而生,它是一种通过网络连接来提供文件服务的分布式系统。
分布式文件系统采用了分布式存储的方式,将数据存储在多台服务器上,并通过网络进行数据访问和管理,具有良好的扩展性、容错性和高性能。
1、HDFSHDFS是Apache Hadoop项目中的分布式文件系统,它是Hadoop生态系统的核心组件之一。
HDFS采用主从架构,包括一个NameNode和多个DataNode,它通过数据块的方式来存储大数据,支持高并发的数据读写和副本数据备份。
HDFS具有良好的扩展性和容错性,是存储大数据的首选技术。
2、GFSGFS(Google File System)是谷歌公司开发的分布式文件系统,用于支持谷歌搜索引擎的大规模数据存储和处理。
大数据的存储方法随着信息技术的快速发展,大数据正成为各个行业中不可忽视的重要资源。
大数据的存储方法也因此变得愈发重要。
在处理大数据时,合理的存储方法能够提高数据的可靠性、安全性和高效性,为数据分析和挖掘提供有力支持。
本文将介绍几种常见的大数据存储方法。
1. 关系型数据库存储方法关系型数据库是一种结构化的数据存储方式,采用表格的形式来组织数据。
在大数据环境下,关系型数据库仍然具有一定的应用场景。
例如,可以使用MySQL、Oracle等关系型数据库来存储结构化数据,如用户信息、订单信息等。
关系型数据库具有数据一致性和事务支持的特点,适用于需要频繁更新和查询的场景。
2. NoSQL数据库存储方法NoSQL数据库是一种非关系型数据库,它以键值对、文档、列族、图等方式存储数据。
NoSQL数据库适用于海量数据的存储和分析,具有高扩展性和高吞吐量的特点。
例如,HBase是一种基于Hadoop的列式数据库,适用于存储大规模结构化数据。
Cassandra是一种分布式数据库,适用于高度可扩展的大数据存储和分析。
3. 分布式文件系统存储方法分布式文件系统是一种将数据分布在多个节点上的存储方式。
它将数据切分成多个块,并将这些块分散存储在不同的节点上,以实现数据的高可靠性和高可扩展性。
Hadoop分布式文件系统(HDFS)是一种常见的分布式文件系统,适用于存储大文件和大规模数据集。
HDFS通过数据冗余和分布式计算来提高数据的可靠性和处理效率。
4. 列式存储方法列式存储是一种将数据按照列存储的方法。
相比于传统的行式存储,列式存储在数据查询和分析方面具有更高的效率。
列式存储将同一列的数据存储在一起,方便进行数据压缩和查询操作。
例如,HBase和Cassandra都是列式存储数据库。
5. 内存数据库存储方法内存数据库是一种将数据存储在内存中的数据库。
相比于磁盘存储,内存数据库具有更快的数据读写速度。
内存数据库适用于对实时性要求较高的场景,如实时分析和实时推荐。
NoSQL是什么意思今天⼩编带⼤家了解下NoSQL,从⼴义上说,NoSQL指的是⾮关系型数据库,说的其实不是不⽤SQL,⽽是不只是SQL(NOT ONLY SQL)。
NoSQL旨在打破关系型数据库的统治格局,解决关系型数据库解决不了的问题。
各个NoSQL数据库都有⼀个共同的特点,就是能存储海量的数据。
NoSQL没有复杂的关系模式,库中的表是可以拆分的。
⼏乎所有的NoSQL数据库都没有数据表(table)的概念,取⽽代之的是⽂档(document)。
⽽⽂档就是⼀个key-value(键-值)⽅式存储数据的结构。
⽐如{"item":"cigarette","brand":"Marlboro"}{"item":"liqor","brand":"Bacardi","qty":10}。
把很多⽂件(document)存储到⼀起的结构式集合(collection),⽽同⼀个集合(collection)⾥⾯的⽂件(document)的结构是不完全⼀致的。
NoSQL对数据的存储类型没有要求,什么都能往⾥⾯存,这也是NoSQL可以存储图像等复杂⽂件的原因。
其中存储专业图的NoSQL数据库是Neo4J,存储⽂档⽐较占优势的是MongoDB,其他还有Cassandra等,HBASE也是⼀个NoSQL数据库。
下⾯我们就MongoDB做⼀个简单介绍:MongoDB是⼀个基于分布式⽂件存储的数据库,由C++编写,旨在为WEB应⽤提供可扩展的⾼性能数据存储解决⽅案。
他⽀持的数据结构⾮常松散,是类似json的bjson格式,因此他可以存储⽐较复杂的数据类型。
MongoDB⽀持的查询语⾔⾮常强⼤,其语法类似⾯向对象的查询语⾔,⼏乎可以实现类似关系数据库单表查询的绝⼤部分功能,⽽且还⽀持对数据建⽴索引。
NoSQL 是非关系型数据存储的广义定义。
它打破了长久以来关系型数据库与ACID理论大一统的局面。
NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。
在大数据存取上具备关系型数据库无法比拟的性能优势。
随着互联网web2.0网站的兴起,NoSQL数据库现在成了一个极其热门的新领域,NoSQL产品的发展非常迅速.目前Google的BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。
Versant成立于1988年,是全球最大的下一代数据库供应商之一。
Versant公司总部位于美国硅谷,在德国、中国、日本和印度等地建有分支机构,提供全球化服务与支持网络。
Versant 数据库产品是成熟而完整的商业高性能存储解决方案,在各行各业都有庞大的客户群,在中国也有坚实的客户基础。
Versant数据库是创新型产品,能突破传统关系数据库的基表模型在描述复杂应用模型时的局限性,为各种应用提供更直接,更高性能,更低成本的数据存储方案。
Versant数据库能无缝支持C++、Java等各种现代程序语言中必需的导航式对象访问,也能够提供常见的基于SQL查询语言的数据访问能力。
Versant数据库也是分布式数据库,能够实现大规模无缝数据分发并提供极高的大规模并发访问处理能力。
Versant数据库已经为各类云计算应用的云数据存储提供了现成可用的商业解决方案。
Versant数据库使得开发/维护成本高昂的O/R映射成为过去,使得系统架构师可以更灵活地发挥,使RUP开发过程可以一贯到底,为开发团队提供了方便、清晰、高效的开发解决方案,可以帮助客户节省多达三分之一的综合开发成本。
Versant数据库同样也可以帮助客户节约硬件投资,降低综合管理以及运营维护成本,并提高客户的市场竞争力。
Versant Object Database (V/OD) 提供强大的数据管理,面向C++, Java or .NET 的对象模型,支持大并发和大规模数据集合。
非结构化数据存储解决方案一、引言非结构化数据是指那些没有明确定义的数据,无法按照传统的关系型数据库模型进行存储和管理的数据。
随着大数据时代的到来,非结构化数据的规模和重要性不断增加,因此寻觅一种高效的非结构化数据存储解决方案变得尤其关键。
本文将介绍一种基于分布式文件系统和NoSQL数据库的非结构化数据存储解决方案。
二、分布式文件系统分布式文件系统是一种将文件存储在多个节点上的系统,具有高可用性、可扩展性和容错性等特点。
在非结构化数据存储解决方案中,分布式文件系统可以用来存储非结构化数据的原始文件,提供高效的读写性能和可靠的数据存储。
1. 文件存储分布式文件系统将非结构化数据的原始文件分割成多个块,并将这些块分布在不同的节点上进行存储。
这种方式可以提高数据的读写性能,同时也能够实现数据的冗余备份,提高数据的可靠性。
2. 数据索引为了方便对非结构化数据进行检索和查询,分布式文件系统需要建立相应的索引机制。
索引可以根据数据的特征和属性进行构建,以提高数据的访问效率。
常见的索引方式包括倒排索引、B树索引等。
三、NoSQL数据库NoSQL数据库是一种非关系型数据库,适合于存储和管理非结构化数据。
与传统的关系型数据库相比,NoSQL数据库具有高可扩展性、高性能和灵便的数据模型等特点,非常适合存储非结构化数据。
1. 数据模型NoSQL数据库支持多种数据模型,包括键值对、文档型、列族型和图形型等。
根据非结构化数据的特点和需求,可以选择合适的数据模型来存储和管理数据。
2. 数据查询NoSQL数据库提供了灵便的数据查询和检索方式,可以根据数据的特征和属性进行高效的查询。
同时,NoSQL数据库还支持分布式计算和并行查询,提高数据的处理性能。
四、非结构化数据存储解决方案的架构设计基于分布式文件系统和NoSQL数据库的非结构化数据存储解决方案的架构设计如下:1. 数据采集首先,需要对非结构化数据进行采集。
采集可以通过爬虫、日志采集等方式进行,将数据保存为原始文件。
Microcomputer Applications V ol.27,No.10,2011开发应用微型电脑应用2011年第27卷第10期55文章编号:1007-757X(2011)10-0055-04NoSQL 数据库与关系数据库的比较分析吕明育,李小勇摘要:介绍了两个具有代表性的NoSQL 数据库:Bigtable 和Dynamo 系统。
首先,描述了Bigtable 和Dynamo 的适用范围及其产生原因。
Bigtable 和Dynamo 可以高效的处理web 数据提供相应服务;然后,介绍了Bigtable 和Dynamo 系统的架构、特性等,以及各自独特的设计方法。
最后,将这两个数据库与传统的关系数据库进行比较分析,描述了它们之间的不同点,对比结果表明NoSQL 数据库在处理web 应用数据时是高效可用的,比传统关系数据库更占优势。
关键词:Bigtable ,Dynamo ,NoSQL ,关系数据库中图分类号:TP311文献标志码:A0引言以MySQL ,Oracle ,Sybase ,PostgreSQL 为代表的传统关系数据库在过去的20多年里得到了广泛应用,但面对新兴的web 应用却表现出诸多不足。
Web 应用和服务在数据访问操作中主要面向准结构化数据和非结构化数据,其需求与传统数据库所管理的结构化数据有显著区别,这些新兴的应用并不需要传统数据库所支持的ACID 语义,但在系统的可扩展性与并发访问能力上有更高的要求。
面向这类应用设计的数据库一般称为NoSQL 数据库。
随着web 应用的普及与数据量的爆炸性增长,NoSQL 已成为目前产业界和学术界研究的热点,也涌现了一些具有显著特色的NoSQL 数据库系统。
其中最有代表的是Google 的Bigtable 系统、Amazon公司的Dynamo 系统、Yahoo 的PNUTS 、Hadoop 的一个项目Hbase 等等。
本文将对前两个NoSQL 数据库系统进行介绍,并将其与传统的关系型数据库进行比较和分析。
数据库原理与应用重要知识点总结1.数据库的基本概念数据库是指存储、管理和组织数据的集合,它通过一系列的操作来实现对数据的有效管理和利用。
数据库管理系统(DBMS)则是对数据库进行管理的软件系统。
2.数据模型数据模型是描述数据库结构的方式,常见的数据模型有层次模型、网状模型和关系模型。
其中,关系模型在实际应用中应用最广泛。
3.关系模型关系模型通过表格的形式来表示数据,表格中的行表示记录,列表示字段。
表格之间可以建立关系,例如通过外键实现表格之间的关联。
4.数据库管理系统(DBMS)DBMS是对数据库进行管理和操作的软件系统,它提供了数据的存储、检索、更新和删除等功能。
常见的DBMS有MySQL、Oracle、SQL Server 等。
5.SQL语言SQL(Structured Query Language)是用于访问和管理关系数据库的语言,它包括数据定义语言(DDL)、数据查询语言(DQL)、数据操作语言(DML)和数据控制语言(DCL)等。
6.数据库设计数据库设计是指根据系统需求和功能要求,将现实世界中的实体和关系转化为数据库中的表格和关系的过程。
数据库设计需要考虑数据的完整性、安全性、可扩展性等方面。
7.关系数据库规范化关系数据库规范化是将数据库中的表格按照一定的条件和规则进行分解和重组的过程。
目的是减少数据冗余、提高数据的存储效率和查询性能。
8.数据库索引数据库索引是对数据库中的数据进行快速访问的数据结构,它可以提高查询效率。
常见的索引类型有B树索引、哈希索引和全文索引等。
9.数据库事务数据库事务是一系列的数据库操作,它要么全部完成,要么全部不完成。
事务具有ACID属性,即原子性、一致性、隔离性和持久性。
10.数据库安全性数据库安全性是指保护数据库中的数据免受恶意攻击和非法访问的能力。
数据库的安全措施包括用户认证、访问控制、数据加密等。
11.数据库备份与恢复数据库备份是指将数据库中的数据和结构以其中一种形式进行复制和存储,以防止数据丢失。
nosql 面试题NoSQL(Not Only SQL)是一种用于设计和管理大规模分布式数据存储的数据库系统。
与传统的关系型数据库相比,NoSQL数据库更加强调可伸缩性和性能表现。
在面试中,面试官通常会提出一些与NoSQL相关的问题,以评估应聘者对这种数据库系统的理解和运用能力。
以下是一些常见的NoSQL面试题,供参考:1. 请简要介绍NoSQL数据库,并列举几种常见的NoSQL数据库类型。
NoSQL数据库是一种与传统关系型数据库不同的数据库系统,它主要用于处理大规模的非结构化或半结构化数据。
NoSQL数据库采用了分布式计算和存储技术,具有良好的横向扩展性和高性能表现。
常见的NoSQL数据库类型包括键值存储型、文档型、列存储型和图形型数据库。
2. 请解释一下键值存储型数据库的特点,并说明其适用场景。
键值存储型数据库是一种简单的数据库系统,它将数据存储为键值对的形式。
每个键(key)都是唯一的,并与一个对应的值(value)相关联。
键值存储型数据库具有高效的读写性能,适用于需要快速存取数据的场景,如缓存、会话存储等。
3. 什么是文档型数据库?请举例说明其应用场景。
文档型数据库是一种将数据存储为文档的数据库系统。
文档通常采用类似于JSON或XML的格式进行组织,可以包含复杂的数据结构。
文档型数据库具有灵活的数据模型,适用于存储半结构化或非结构化数据。
例如,MongoDB是一种常见的文档型数据库,在Web应用程序中可以用于存储用户信息、文章内容等。
4. 列存储型数据库有哪些优势?请举例说明其使用场景。
列存储型数据库是一种将数据存储为列的数据库系统,它以列为单位进行读写操作,具有较高的读取性能和良好的可压缩性。
列存储型数据库适用于需要查询特定列的场景,如数据分析和业务报表生成。
HBase是一种常见的列存储型数据库,被广泛应用于大数据领域。
5. 图形型数据库的主要特点是什么?请举例说明其应用场景。
图形型数据库是一种专门用于处理图形结构数据的数据库系统。
在当今信息时代,数据库技术已经成为计算机科学中不可或缺的一部分。
为了提高自己的数据库技术水平,我在近期参加了一次为期一个月的数据库实训。
通过这次实训,我对数据库有了更深入的了解,以下是我对实训的心得体会。
二、实训内容1. 数据库基本概念:在实训过程中,我们学习了数据库的基本概念,如数据库、数据库管理系统、数据模型等。
通过学习,我对数据库有了初步的认识。
2. 关系型数据库:我们重点学习了关系型数据库,包括SQL语言、数据库设计、索引、视图、触发器等。
通过实际操作,我们掌握了关系型数据库的基本应用。
3. 非关系型数据库:随着大数据时代的到来,非关系型数据库越来越受到关注。
我们学习了NoSQL数据库,如MongoDB、Redis等,了解了其特点和应用场景。
4. 数据库设计:数据库设计是数据库应用的基础。
我们学习了数据库设计方法,包括需求分析、概念设计、逻辑设计、物理设计等。
5. 数据库性能优化:为了提高数据库的运行效率,我们学习了数据库性能优化方法,如索引优化、查询优化、存储优化等。
三、实训心得体会1. 理论与实践相结合:通过这次实训,我深刻体会到理论与实践相结合的重要性。
在课堂上学习到的理论知识,在实际操作中得到了验证和巩固。
2. 数据库设计的重要性:数据库设计是数据库应用的基础。
一个良好的数据库设计可以提高数据库的运行效率,降低维护成本。
在实训过程中,我学会了如何进行数据库设计,为今后的工作打下了基础。
3. 数据库优化技巧:数据库优化是提高数据库性能的关键。
在实训过程中,我学习了多种数据库优化技巧,如索引优化、查询优化等,这些技巧将对我今后的工作产生积极影响。
4. 非关系型数据库的应用:随着大数据时代的到来,非关系型数据库越来越受到关注。
通过学习非关系型数据库,我拓宽了自己的技术视野,为今后应对复杂业务场景打下了基础。
5. 团队合作精神:在实训过程中,我们分成小组进行项目实践。
每个成员都发挥了自己的专长,共同完成了项目。
数据库 一、 NoSQL数据 简介 NoSQL(NoSQL = Not Only SQL ),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。 优点 可以处理超大量的数据 可以运行在便宜的PC服务器集群上 打破了性能的瓶颈 NoSQL的支持者称,通过NoSQL架构可以省去将Web或Java应用和数据转换成SQL友好格式的时间,执行速度变得更快。 “SQL并非适用于所有的程序代码,” 对于那些繁重的重复操作的数据,SQL值得花钱。但是当数据库结构非常简单时,SQL可能没有太大用处。 没有过多的操作 Bootstrap支持 因为NoSQL项目都是开源的,因此它们缺乏供应商提供的正式支持。这一点它们与大多数开源项目一样,不得不从社区中寻求支持。 缺点 没有正式的官方支持,万一出了差错会是可怕的 nosql并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时间来检验
二、 NoSQL数据库开源软件
1. MongoDB: 简介 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和 非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比 较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部 分功能,而且还支持对数据建立索引。 特点 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据 “面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。 模式自由 模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。 支持动态查询 支持完全索引,包含内部对象 支持查询 支持复制和故障恢复 使用高效的二进制数据存储,包括大型对象(如视频等) 自动处理碎片,以支持云计算层次的扩展性 支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言 文件存储格式为BSON(一种JSON的扩展) BSON(Binary Serialized dOcument Format)存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。 可通过网络访问 MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB
2. Google BigTable 简介 BigTable是非关系的数据库,是一个稀疏的、分布式的、持久化存储的多维度排序Map。Bigtable的设计目的是可靠的处理PB级别的数据,并 且能够部署到上千台机器上。Bigtable已经实现了下面的几个目标:适用性广泛、可扩展、高性能和高可用性。Bigtable已经在超过60个 Google的产品和项目上得到了应用,包括 Google Analytics、GoogleFinance、Orkut、Personalized Search、Writely和GoogleEarth。这些产品对Bigtable提出了迥异的需求,有的需要高吞吐量的批处理,有的则需要及时响应,快速返回数据给最终用户。它们使用的Bigtable集群的配置也有很大的差异,有的集群只有几台服务器,而有的则需要上千台服务器、存储几百TB的数据。 功能 在很多方面,Bigtable和数据库很类似:它使用了很多数据库的实现策略。并行数据库和内存数据库已经具备可扩展性和高性能,但是Bigtable提供了一个和这些系统完全不同的接口。Bigtable不支持完整的关系数据模型; 与之相反,Bigtable为客户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的分布和格式(alex注:也就是对BigTable而言, 数据是没有格式的,用数据库领域的术语说,就是数据没有Schema,用户自己去定义Schema),用户也可以自己推测(alex 注:reasonabout)底层存储数据的位置相关性(alex注:位置相关性可以这样理解,比如树状结构,具有相同前缀的数据的存放位置接近。在读取 的时候,可以把这些数据一次读取出来)。数据的下标是行和列的名字,名字可以是任意的字符串。Bigtable将存储的数据都视为字符串,但是 Bigtable本身不去解析这些字符串,客户程序通常会在把各种结构化或者半结构化的数据串行化到这些字符串里。通过仔细选择数据的模式,客户可以控制 数据的位置相关性。最后,可以通过BigTable的模式参数来控制数据是存放在内存中、还是硬盘上。 特点 适合大规模海量数据,PB级数据 分布式、并发数据处理,效率极高 易于扩展,支持动态伸缩 适用于廉价设备 适合于读操作,不适合写操作 不适用于传统关系数据库 应用 BigTable为谷歌旗下的搜索、地图、财经、打印、以及社交网站Orkut、视频共享网站YouTube和博客网站Blogger等业务提供技术支持。 2010年9月,Google宣布将放弃MapReduce 新索引系统将迁移至BigTable平台。新平台基于Colossus,也被称为GFS2。
3. HyperTable 简介 Hypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable相似的模型。在过去数年中,Google为在PC集群 上运行的可伸缩计算基础设施设计建造了三个关键部分。第一个关键的基础设施是Google File System(GFS),这是一个高可用的文件系统,提供了一个全局的命名空间。它通过跨机器(和跨机架)的文件数据复制来达到高可用性,并因此免受传统 文件存储系统无法避免的许多失败的影响,比如电源、内存和网络端口等失败。第二个基础设施是名为Map-Reduce的计算框架,它与GFS紧密协作,帮 助处理收集到的海量数据。第三个基础设施是Bigtable,它是传统数据库的替代。Bigtable让你可以通过一些主键来组织海量数据,并实现高效的 查询。Hypertable是Bigtable的一个开源实现,并且根据我们的想法进行了一些改进。
4. Amazon Dynamo 简介 Dynamo是亚马逊的key-value模式的存储平台,可用性和扩展性都很好,性能也不错:读写访问中99.9%的响应时间都在300ms内 基本原理 CAP原则 Consistency(一致性):即数据一致性,简单的说,就是数据复制到了N台机器,如果有更新,要N机器的数据是一起更新的。 Availability(可用性):好的响应性能,此项意思主要就是速度。 Partition tolerance(分区容错性):这里是说好的分区方法,体现具体一点,简单地可理解为是节点的可扩展性。 任何分布式系统只可同时满足二点,没法三者兼顾。所以架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。 DHT—分布式哈希表 DHT(Distributed Hash Table,分布式哈希表),它是一种分布式存储寻址方法的统称。就像普通的哈希表,里面保存了key与value的对应关系,一般都能根据一个key去对应到相应的节点,从而得到相对应的value。 在DHT算法中,一致性哈希作为第一个实用的算法,在大多数系统中都使用了它。 一致性哈希基本解决了在P2P环境中最为关键的问题—如何在动态的网络拓扑中分布存储和路由。每个节点仅需维护少量相邻节点的信息,并且在节点加入/退出系统时,仅有相关的少量节点参与到拓扑的维护中。 至于一致性哈希的细节就不在这里详细说了,要指明的一点是,在Dynamo的数据分区方式之后,其实内部已然是一个对一致性哈希的改造了。 数据划分 按分布式系统常用的哈希算法切分数据,分放在不同的节点上。读操作时,也是根据key的哈希值寻找对应的节点。Dynamo使用了 Consistent Hashing算法,节点对应的不再是一个确定的hash值,而是一个hash值范围,key的hash值落在这个范围内,则顺时针沿环形查找,碰到的第一个node即为所需。 Dynamo对Consistent Hashing算法的改进在于:它放在环上作为一个节点的是一组机器(而不是把一台机器作为节点),这一组机器是通过同步机制保证数据一致的。 如果一个环形内的访问量大了,则可以在两个节点间加入一个新节点以缓解压力,这时 会影响到其后继节点的hash范围,需要调整数据。假设一个环形中原本只有node2、node3、node4,在加入新的node1之后,原先 从node2查询的部分key将改为从node1查询,node1和node2中的数据就需要调整,主要是node1从node2中提取出属于它的数据, 这样做需要选取性能压力不高的时候 假设我们的数据的key的范围是0到2的64次方,然后设置一个常数,比如说1000,将我们的key的范围分成1000份。然后再将这1000份key的范围均匀分配到所有的节点(s个节点),这样每个节点负责的分区数就是1000/s份分区 数据同步 Dynamo的一个节点中的同步是由client端来“解决”的,使用所谓的(N, R, W)模型,其中,N表示节点中机器的总数,R表示一个读请求需要的机器参与总数,W代表一个写请求需要的机器参与总数,这些值由client端配置。 例如,一个节点有5台机器(N=5),client发出写请求——广播到5台机,如果收到 3个“写完成”的返回消息,即认为写成功(W=3);client发出读请求——还是广播到5台机,如果收到2个“读完成”的返回消息,即认为读成功 (R=2)。对于数据十分重要的应用(如金融),配置可以为(5, 5, 5),即要求node中所有机器的写都成功;而对于数据读写访问量极高的应用,配置可以为(5, 1, 1)。 通常W不等于N,于是,在某些情况下一个节点内的机器上的数据可能会有不一致,这时 Dynamo是通过将多个Read的返回结果“合并”来得出最终结果的,使用了所谓Object Version和Vector clock的技术,即跟踪一个Object在不同机器上的版本变化,以确保当多个Read请求结果返回不一致时,能够更具其版本信息得出正确的结果。 Dynamo的这种做法是一种折中,即为了同时保证读和写的效率,写操作不要求绝对同步,而把不同步可能产生的后果推给了读操作。