首页 > 代码库 > Amazon DynamoDB, 面向互联网应用的高性能、可扩展的NoSQL数据库

Amazon DynamoDB, 面向互联网应用的高性能、可扩展的NoSQL数据库

2012年1月18日,Amazon发布了AmazonDynamoDB,一个完全托管的,高性能,高可靠,经济高效的NoSQL数据库。DynamoDB非常适合互联网规模的应用。

 

DynamoDB数据库融入了亚马逊在大规模非关系型数据库和云计算领域积累的多年丰富经验。早在2007年,亚马逊就曾经发布了一篇论文,深入讨论了Amazon Dynamo使用的设计理念和实现技术,以及如何解决大规模扩展和同时提供高可靠保护的问题。最初的Dynamo设计基于一系列在分布式系统中搭建高可靠、高扩展系统的核心的原则。现在的Amazon DynamoDB,继续基于这些设计原则来构建,并且融入了Amazon多年以来在非关系型数据库和云计算领域积累的宝贵经验,如AmazonSimpleDB和Amazon S3服务。客户可以非常简单的方式使用到完全托管的数据库服务。

 

Amazon DynamoDB 是高性能、可扩展的NoSQL数据库。今天的互联网应用的用户、流量和数据都在不断地增长,数据库如何很好地扩展满足容量和性能的需求成为令人头疼的问题。使用DynamoDB,开发者可以从小规模开始,在应用吸引了更多用户的时候,相应地增加表的性能。DynamoDB中的表可以让用户存储不限容量的数据。通过分布式的技术,DynamoDB把用户对一个表的数据和流量请求分布在足够数量的服务器上来满足并发请求的性能需求。同时,在面对任何规模的请求的时候,DynamoDB都可以提供可以预测的高性能低时延的用户访问。

 

DynamoDB给用户提供了如下价值:

·        使用简单。DynamoDB帮助用户处理所有的数据库管理工作,从硬件资源配置,安装配置,分布式集群的搭建,和日常的系统维护。开发者可以从繁琐的数据库管理工作解放出来。作为完全托管的数据库,你不需要专家的技能来管理DynamoDB的安装-你的开发者完全可以独立完成。访问DynamoDB的时候,可以通过简单地API的方式。目前通过仅仅13个API,你就可以实现对DynamoDB数据库的表的管理,查询检索操作,单个项目Item的访问和实现批量存取项目。

·        可扩展。Amazon DynamoDB的设计,可以把单个表的数据,分布在多个可用区内(AZ)的多个服务器上,来满足容量和吞吐的需求。

·        高性能。在高并发请求的情况下,DynamoDB仍然可以保证很低的延时。因为所有的数据都是采用固态磁盘,所以可以保证持续的高性能。运行在同一个区域内的EC2上的应用程序,在访问DynamoDB的数据对象的时候,通常可以在服务器端体验到个位数毫秒的响应时间。更重要的是,DynamoDB的性能(响应时间)是可以预测的。即使在数据增长的情况下,因为DynamoDB分布式的特点,仍然可以维持稳定的低时延的响应。DynamoDB在后台把你的数据在大量资源之间进行分区和在需要的时候重新分区,从而能够在大规模访问的情况下还能提供很高的IO性能。

·        预配置的吞吐量。AmazonDynamoDB允许你在创建表的时候,指定应用所需要支持的吞吐量。你可以分别指定每秒钟支持多少个读取的吞吐量和写如的吞吐量。AmazonDynamoDB将为你预留必要地机器资源,从而用一致性的低延迟的性能满足你得请求。更重要的是,预配置的性能吞吐量不是一成不变的。在创建表之后,如果你的应用程序非常成功,有了大幅度的增长,你可以随时调大表的性能的吞吐量,从而支撑更多的用户访问请求。相应地,如果你目前应用程序不再需要预配置的性能的吞吐量,你还可以灵活地降低吞吐量指标,从而降低成本。

·        持久和高可用。AmazonDynamoDB自动地在至少3个数据中心内复制数据。每个写操作,在至少写入两个节点之后,才会返回写成功确认。在任何一个节点或者磁盘发生损坏的时候,数据都会及时的重新复制数据和重新分区。这样可以确保在各种复杂的故障出现的时候,DynamoDB仍然可以正常的提供服务,你完全不需要担心因为物理故障造成的数据丢失的情况。

·        模式自由。Amazon DynamoDB使用起来非常灵活。用户不会被限制在某一个特定的数据模型。传统的SQL数据库中,表的模式在创建的时候就定义好。你不能修改或者增加新的列到一个已经创建和定义好的表中。AmazonDynamoDB没有一个固定的模式,用户可以随时给表增加新的属性。灵活地数据模型,可以支持应用程序的敏捷开发和快速迭代更新。

·        灵活地一致性选择。 在分布式环境中经常遇到如何确保数据的一致性的问题。DynamoDB让开发者自由地选择一致性模型。开发者可以选择采用强一致性的方式,还是最终一致性的方式来读取数据。采用最终一致性的方式,意味着在一个写操作完成后,马上读取数据,可能无法读取到最新的数据。最终一致性的模型可以在最大程度上确保服务的可用性,并且改善性能。比较典型的用例是大家在网上购物时使用的购物车,或者网站的评论信息等等。如果选择采用强一致性的方式读取数据,则会牺牲一定程度的性能和服务的可用性,好处是在任何情况下都可以访问到最新的数据,软件开发比较简单。比较典型的用例是需要强一致性的场景,比如网上购物时订单提交的场景。需要使用强一致性来确保同一商品不会同时销售给两个不同的客户。

·        可预测的成本。Amazon DynamoDB的定价模式非常简单和可以预测。基于每月每GB的存储容量,和每月预配置的读取和写入的容量单位计费。容量比较容易理解。预配置的读取和写入的性能容量单位是很关键的概念呢。每个读取容量单位(或者写入容量单位)支持每秒钟进行1次读取(或者写入)1个项目(item),每次读取操作最大4KB大小,每次写入操作最大1KB大小。超出大小的项目(item)需要额外的性能吞吐容量。如果客户选择最终一致性的读取的方式,将获得两倍于预配置的读取性能的吞吐量。举个例子,比如你配置了1000个读取性能容量,和1000个写入性能容量。这种情况下你的表将可以支撑每秒钟1000个读取操作,和1000个写入操作。如果是最终一致性的读取方式的话,你的表将可以支撑每秒2000个读取操作。

 

为了进一步提高应用访问的性能,Amazon DynamoDB创建和维护针对主键属性的索引。应用程序提供主键给数据库,就可以很快地获取所对应的数据。除此之外,AmazonDynamoDB还支持创建全局和本地的二级索引。这样应用程序在查询除了主键外的其他属性时,也可以获得很好地性能。客户可以对一个表创建一个或者多个二级索引,然后对索引运行查询query的操作。


Amazon DynamoDB能让用户以简单并且经济有效地方式存储和检索任意规模的数据,同时提供高并发下地低时延的响应。对于吞吐量的保证和几毫秒的低时延响应,使DynamoDB非常适合游戏、广告、移动等等基于互联网的应用程序。


如果您想要了解更详细的信息,可以访问DynamoDB页面。