简析AWS DynamoDB的几大基本功能

译文
数据库
AWS DynamoDB是一种完全托管的无服务器类型的NoSQL数据库。本文将和您探讨其基本功能、使用场景、计费、设置、查询、以及扫描等方面,以便您更好地将其运用在自己的应用之中。

【51CTO.com快译】AWS DynamoDB是一种完全托管的无服务器(Serverless)类型的NoSQL数据库。本文将和您探讨DynamoDB的基本功能、使用场景、计费、设置、查询、以及扫描等方面,以便您更好地将其运用在自己的应用之中。

[[347034]]

什么是AWS DynamoDB?

总的说来,DynamoDB是一种键-值(key-value)和文档型数据库,基本可以达到毫秒级的响应时间。作为持久数据库,它具有内置的安全性、备份与还原等功能。

在DynamoDB中,您经常会听到的一个关键词是:NoSQL数据库。这表明它并不使用关系型数据库(https://aws.amazon.com/relational-database/)的传统SQL查询语言,而是被设计为通过将对象合并到某个NoSQL数据库中的公共集合、或schemaless表中,来减少复杂性。这些对象将会根据通用主题被分组到一起,以满足应用程序被预设的通用查询条件。

关键术语:

•表(Table):可以容纳几乎无限数量表项的集合,可带有二级索引。

•二级索引(Secondary Index):使用不同的主键和排序键来复制表项。

•主键(Primary Key):是一种特殊形式的属性,可用于参考表项,类似于表项的ID。

•排序键(Sort Key):是另一种特殊形式的属性,可用于组织不同排序的表项。

•表项(Item):作为AWS DynamoDB中最基本的单元,它是JSON形式的结构化数据属性。

•属性(Attribute):是一个键-值对,其中包含着有关数据表中某个表项的信息性数据点(data-point)。

•流(Streams):是针对数据表执行状态改变(state-changing)操作的恒定流。

•查询(Query):检索特定表项(或表项集)的操作。

•扫描(Scan):用于扫描整张表或表的某部分的操作。

•过滤器(Filter):完成查询或扫描后,将结果返回给请求者之前,所应用的规则。

如何存储数据?

键-值存储是一张按比例扩展(scaled-up)的分布式哈希表。该表中的表项可以通过键-值对的属性来唯一标识。该属性对可用于GET、SET、UPDATE和DELETE等操作。该属性通常有两种类型:主键(类似表项的ID)和排序键(可用于对表项进行排序)。

众所周知,哈希表的优点是:无论表的大小,它总是可靠、一致且快速的。而缺点是:一次只能检索一条记录。对此,DynamoDB可采取宽列(wide-column)存储的形式,即:每一行在任何时候都会具有任意数量的列。这种B树(B-tree)的数据结构与二级索引不但提供了查找表项的选项,而且允许用户进行范围查询。同时,它们可用于通过不同的主键和排序键,来参考和排序表项。此外,由于DynamoDB是一个schemaless数据库,因此其中的表项可以具有不同的属性集。

如何实现自动扩展?

无服务器计算的最大好处之一是:开发人员可以在时间和预算上采用自动化的方法,以确保容量不会受限。DynamoDB可以通过自动扩展,来应对需求的激增,避免出现限流或响应速度骤降,进而合理地利用资源。

通过使用AWS应用自动扩展(Application Auto Scaling),DynamoDB允许用户对数据表采取自定义的扩展策略,按需增加读取和写入的容量。通常,此类策略包括了:指定最小和最大预购置的容量单位,以及目标利用率(如:已消耗的预购置吞吐量百分比)。目标利用率通过与目标跟踪算法结合,确保无论工作负载如何变化,吞吐量都能够与设定的目标相匹配。

功能与使用场景

除了数据库的基本功能,DynamoDB还拥有包括:备份和恢复、全局存储、DynamoDB加速器(DAX)、DynamoDB流、以及数据传输在内的其他功能。而作为AWS的顶级服务之一,DynamoDB每天都可以处理10tr以上的请求,并且可以支持每秒超过2000万个请求的峰值。因此,它适用于任何规模的要求提供低延迟数据访问的应用。

由于非常适用于HTTP与AWS IAM的应用场景,因此DynamoDB数据库不但能够始终受到保护,并且无需复杂的网络配置(如:网络分区),便可快速地对请求进行身份验证,并安全地完成各项初始化步骤。

由于使用场景十分广泛,因此DynamoDB有着丰富的用户案例。从Lyft和Airbnb之类的成长型公司,到Capital One和Nike等历史悠久的企业,都在其架构中使用到了DynamoDB。

计费

DynamoDB通过如下两种容量模式,来对目标数据表的读取和写入操作进行计费。

•按需

此模式意味着无需预先指定读、写吞吐量,按需进行扩展。因此,如果您的数据表或流量存在着不可预测性,那么这是一种不错的选择。

•预购置

通过预购置容量,您可以指定每秒所需的读写次数。自动扩展功能在此可以根据指定的利用率,通过自动化调整,以保证高性能和对预算的管理。

当然,这两种模式的成本也会根据实际的使用量产生巨大的差异,因此我们需要事先做好相应的估算。

具体而言,对于按需模式,DynamoDB会按照每百万个单位进行收费;而对于预购置模式,DynamoDB则按每小时的单位量来进行收费。

值得一提的是:作为预购置模式下的附加项,预存容量(Reserved Capacity)不但可以节省成本,而且能够通过支付一次性前期费用,来保障在预存容量期限内,按小时支付最低吞吐量级别的开销。不过,任何未使用的容量都不会顺延到次月。

读写请求计费

  • 在写入的方面,DynamoDB将每个写入请求计作一个单位(最多为1 KB),而将每个事务性写入算作两个写入请求单位。
  • 在读取方面,DynamoDB将每个高度一致的读取请求计作一个单位(最多为4 KB),将每个事务性读取算作两个读取请求单位,而将每个最终一致的读取只算作一半的读取请求单位。

AWS Free Tier

在AWS Free Tier中,DynamoDB能够提供如下“福利”。当然,它们的每一项都是按月、按区域、按账户来计费的。

•25个WCU和25个RCU的预购置容量。

•25 GB的数据存储空间,之后按每GB、每月收取费用。

•25个rWCU可用于在两个AWS区域中部署全局表。

•250万个源自DynamoDB流的流式读取请求。

•1 GB的数据输出(前12个月为15 GB),可横跨AWS的各项服务进行汇总。

如何在DynamoDB表上节省成本?

“按需”模式虽然灵活自主,但其成本却高达“预购置”模式的七倍。相反,使用预购置模式势必让开发人员承担更多估算容量的任务,并且可能会在可扩展性上有所欠缺。下面是有关如何为应用选择正确的模式,以及优化数据表的三点建议:

1.自动化扩展功能不但需要进行基准测试,而且很难适应需求的快速变化。因此,用户需要在尽可能接近系统的分布式情况下运行测试,以确保自动化扩展能够满足真正的业务需求。

2.对于按需读取密集型数据表的需求,DAX是一种基于使用率的经济型选择。一个小型DAX实例(如:t2.medium)的成本,与“按需”模式下超过200M的读取操作基本相同。也就是说,只有在高吞吐量的情况下,“按需”模式才会体现出节省的优势。

3.对于那些写入密集型的工作负载,SQS是管理高吞吐量、以及不可测流量峰值的理想选择。各种消息会通过DynamoDB写入数据的Lambda函数进行轮询。数据库通过限流来更好地分配容量,进而充分地利用“预购置”容量模式的优势。

如何设置AWS DynamoDB

总的说来,设置DynamoDB并不难。下面,我们将展示如何使用AWS Free Tier中的各种参数和功能。

创建NoSQL表

1.在DynamoDB控制台上单击“创建表”。

2.自定义表的名称。

3.将主键或分区键(Partition Key)作用于跨分区的分布数据上,以实现可扩展性。据此,您可以将一系列数值均匀地分布到不同的访问模式中。

4.由于排序键只能对上述数据进行排序,因此您需要对表进行数据挖掘。

5.要启用“自动扩展”功能,则需取消勾选“默认设置”框,以便自动创建一个名为DynamoDBAutoScaleRole的AWS IAM角色,来管理自动化扩展过程。

6.最后,请将界面滑到底部,并单击“创建”。

新增数据

1.在“表项”选项卡中,单击“创建表项”。

2.为每个数据表项添加主键和排序键的相关数据,每次都需点击“保存”。

DynamoDB 流

DynamoDB流可以在数据发生变更的时间点,捕获表的更改,进而将这些更改存储到日志中,并保存24小时。

我们可以将已更改表项的主键属性,作为流式记录实时写入,以确保更改的时序性。此外,我们也可以通过配置,让它能够捕获诸如更改前、后的状态等其他数据。这些流式记录可以被其他应用程序所使用,例如:

•汇总来自多个操作的指标,比如:在特定时间段内一次性记录某个社交平台的“点赞”数量。

•在客户将数据添加到DynamoDB表时,会触发一封电子邮件,以确认输入数据的正确性。

•在移动应用的数据表中,数据往往以每分钟上千次的频率变化着。这就需要另一个应用来存储变更的详细信息,以便提供“参与度”之类的实时指标。

此外,值得注意的是,虽然AWS DynamoDB和DynamoDB Stream使用不同的端点,但是两者必须属于同一个区域。

DynamoDB查询

您可以根据主键去查询表中的一个或一组表项,并快速地检索到它们。下面展示了查询数据表的操作步骤:

1.在“表项”选项卡的下拉框中选择“查询”。

2.在主键或排序键的搜索框中输入关键字,按需进行查询。

DynamoDB扫描

DynamoDB扫描可以通过读取数据表、或二级索引中的每个表项,以返回结果集。通过排序键,您也可以决定扫描的顺序。同时,过滤器表达式可以被用于确定从扫描中返回哪些表项。当然,扫描可能会影响应用的整体性能,因此,除非的确需要扫描每一个表项,否则请改为使用DynamoDB查询的方式。

原文标题:The Ultimate Guide to AWS DynamoDB,作者: Taavi Rehemägi

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:火凤凰 来源: 51CTO
相关推荐

2010-06-28 21:33:17

eMule协议

2012-10-22 16:47:45

IBMdw

2010-04-16 09:06:18

WPF 4

2019-04-16 08:21:46

2010-03-02 17:43:31

WCF框架处理流程

2010-01-05 15:27:04

.NET Framew

2019-09-16 08:22:12

特权访问管理PAM网络安全

2021-06-03 09:20:33

微服务架构代码

2015-07-07 14:17:56

物联网操作系统

2010-01-20 18:20:50

2023-05-11 08:59:43

Nginx配置服务器

2010-01-04 10:47:08

智能交换机

2009-12-03 09:08:21

路由器基本功能

2017-01-15 17:15:27

Java基本功能

2011-04-29 14:04:56

一体机

2009-12-03 14:10:22

路由器基本功能

2015-11-09 10:34:54

iOS 9.1 iPhone

2010-02-03 09:59:18

2009-12-08 13:58:12

Linux操作系统垃圾邮件

2009-11-24 17:35:59

路由器基本功能
点赞
收藏

51CTO技术栈公众号