Amazon SimpleDB 提供简单的 Web 服务接口,可以创建和存储多个数据集、轻松查询数据,并返回结果。您的数据将会自动索引,方便您快速找到所需的信息。如果稍后加入新的数据,无需预先定义架构或更改架构。而且,扩展也像创建新域一样简单,不必构建新的服务器。

要使用 Amazon SimpleDB,您需要:

  • 构建您的数据集
    • 为您的域选择一个区域,以便优化延迟性、尽量降低成本,或满足法规要求。目前有八个区域提供 Amazon SimpleDB:美国东部(弗吉尼亚北部)、美国西部(俄勒冈)、美国西部(加利福尼亚北部)、欧洲(爱尔兰)、亚太地区(新加坡)、亚太地区(东京)、亚太地区(悉尼)和南美洲(圣保罗)。
    • 使用 CreateDomainDeleteDomainListDomainsDomainMetadata,以创建和管理查询域
    • 使用 PutBatch PutDelete,以创建和管理各个查询域中的数据集
  • 检索您的数据
    • 使用 GetAttributes,以检索特定的项目
    • 使用 Select,以查询符合特定条件的项目的数据集
  • 仅为消耗的资源支付费用


Amazon SimpleDB 所用的数据模型可方便您存储、管理和查询您的结构化数据。开发人员可以将数据集整理到域中,并对特定域中存储的所有数据运行查询。域是项目的集合,通过属性-值对进行描述。

这些术语可理解为类似于传统电子表格中的对应概念。以下表中显示的客户管理数据库详细信息为例,考虑它们在 Amazon SimpleDB 中的表示方式。整个表就是一个名为“customers”的域。 各个客户就是表中的行或域中的项目。联系信息用列标题(属性)来描述。值位于各个单元格中。现在假设下面的记录是您要添加到域中的新客户。

客户 ID 街道地址 城市 省/市/自治区 邮编 电话
123 Bob Smith 123 Main St Springfield MO 65801 222-333-4444
456 James Johnson 456 Front St Seattle WA 98104 333-444-5555

在 Amazon SimpleDB 中,要添加上述记录,您需要将 CustomerID 和各个客户的属性-值对一起 PUT 到您的域中。无需特定的语法,可以像下面这样:

PUT (item, 123), (First name, Bob), (Last name, Smith), (Street address, 123 Main St.), (City, Springfield), (State, MO), (Zip, 65801), (Telephone, 222-333-4444) PUT (item, 456), (First name, James), (Last name, Johnson), (Street address, 456 Front St.), (City, Seattle), (State, WA), (Zip, 98104), (Telephone, 333-444-5555)

Amazon SimpleDB 与传统数据库的表格有几个重要方面的区别。您可以灵活选择,以便将来轻松返回并添加仅应用到特定记录的属性。例如,假设您开始采集客户的电子邮件地址,以便启用对订单状态的实时警告。与重建“customer”表、重写查询和重建索引等相比,您只需要向现有的“customer”域添加新的记录和任何其他属性。生成的域可能类似于如下所示:

客户 ID 街道地址 城市 省/市/自治区 邮编 电话 电子邮件
123 Bob Smith 123 Main St Springfield MO 65801 222-333-4444  
456 James Johnson 456 Front St Seattle WA 98104 333-444-5555  
789 Deborah Thomas 789 Garfield New York NY 10001 444-555-6666 dthomas@xyz.com

Amazon SimpleDB 提供了少量简单的 API 调用,可以实施数据的编写、索引和查询。这种接口与功能组合有意将重点放在核心功能上,为开发人员提供基本的 API,方便在该服务基础上进行构建,也使得服务本身易于学习且使用简便。

  • CreateDomain – 创建包含您的数据集的域。
  • DeleteDomain – 删除域。
  • ListDomains – 列出所有的域。
  • DomainMetadata – 检索有关域创建时间的信息和存储信息(表示为项目名称和属性的数量,以及以字节为单位的总大小)。
  • PutAttributes – 添加或更新项目及其属性,或者向已存在的项目添加属性-值对。收到项目时会自动对其进行索引。
  • BatchPutAttributes – 在一次调用中最多执行 25 个 PutAttribute 操作,以使批量写入实现更高的总体吞吐量。
  • DeleteAttributes – 删除项目、属性或属性值。
  • BatchDeleteAttributes – 在一次调用中最多执行 25 个 DeleteAttributes 操作,以使批量删除实现更高的总体吞吐量。
  • GetAttributes – 检索项目,以及其全部或部分属性和值。
  • Select – 以熟悉的“select target from domain_name where query_expression”语法查询数据集。支持的值测试为:=、!=、like、not like、between、is null、is not null 和 every ()。示例:select * from mydomain where every(keyword) = ‘Book’。使用 SORT 操作符对结果排序,并使用 Count 操作符统计有多少个项目符合查询语句中由谓词指定的条件。

注意:Amazon SimpleDB 已经和 AWS Identity and Access Management 集成,实现对 Amazon SimpleDB 资源的精细控制。通过与 AWS Identity and Access Management 集成,注册使用 SimpleDB 的 AWS 账户可以创建多个用户。这些用户因而能被授予 SimpleDB API 级别的权限,以访问 AWS 账户所拥有的 SimpleDB 域。有关其他详细信息,请参阅 AWS Identity and Access Management 详细信息页面

Amazon SimpleDB 可为每个域存储分散在各地的副本,以实现高可用性和数据持久性。成功的写入(使用 PutAttributes、BatchPutAttributes、DeleteAttributes、BatchDeleteAttributes、CreateDomain 或 DeleteDomain)意味着将持久保留该域的所有副本。Amazon SimpleDB 支持两种读取一致性选择:最终一致性读取和一致性读取。

  • 最终一致性读取(默认) – 最终一致性读取选项可使您的读取性能(在延迟和高吞吐量方面)得到最大化。但是,最终一致性读取(使用 Select 或 GetAttributes)可能不会反映最近完成的一次写入操作(使用 PutAttributes、BatchPutAttributes、DeleteAttributes 和 BatchDeleteAttributes)的结果。所有数据副本的一致性通常可在一秒钟之内实现;在短时间之后重复读取,应会返回更新的数据。
  • 一致性读取 – 除了提供最终一致性读取外,Amazon SimpleDB 还让您能根据应用程序或应用程序某元素的要求,以灵活而有控制力的方式请求一致性读取。一致性读取(在 ConsistentRead=true 条件下使用 Select 或 GetAttributes)返回的结果可反映在读取前收到成功响应的所有写入。

默认情况下,GetAttributes 和 Select 执行最终一致性读取。由于一致性读取可能导致延迟提高和读取吞吐量降低,所以最好仅在以下应用环境下才使用:读取操作绝对需要读取所有在该次读取前收到了成功响应的写入。对于所有其他案例,默认的最终一致性读取将为用户提供最佳的性能。另外请注意,Amazon SimpleDB 允许您为每个单独的读取请求指定一致性设置,所以同一应用程序的不同部分可能采用了不同的一致性设置。

Amazon SimpleDB 不是关系数据库,它舍弃了复杂的事务处理和关系(即:联接),从而提供了独一无二的功能和性能特征。不过,Amazon SimpleDB 还是提供了事务处理语义,例如:

  • Conditional Puts/Deletes – 如果现有的属性值与您指定的值匹配,允许您插入、替换或删除项目的一个或多个属性值。如果值不匹配或不存在,将会拒绝更新。当不同的来源向同一项目并行写入时,Conditional Puts/Deletes 有助于防止丢失更新。

通过用预期值指定可选条件,Conditional puts/deletes 可借助 PutAttributes 和 DeleteAttributes API 显示出来。例如,如果您的应用程序是针对某项活动预订座位或售票,则您可能仅在指定的座位仍然可用时(可选条件)才允许购买(即:写入更新)。此外,也可以使用这些语义来实施计数器、仅在项目尚不存在时插入项目以及乐观并行控制 (OCC) 等功能。通过保留版本号(或时间戳)属性作为项目的一部分并根据此版本号的值执行 conditional put/delete,应用程序可实施 OCC。

要了解更多有关 Amazon SimpleDB 事务语义和一致性的信息,请参阅 Amazon SimpleDB Developer GuideConsistency Enhancements Whitepaper

Amazon Web Services 为开发人员提供了很多数据库备选项。您可以运行完全托管的关系型服务和 NoSQL 服务,或者也可以在 Amazon EC2 和 Amazon EBS 的中运行您自己的数据库。

Amazon RDS 让您能运行功能完善的关系数据库,同时又让您摆脱繁琐的数据库管理工作。Amazon DynamoDB 是一种完全管理型的 NoSQL 数据库服务,提供速度极高而可预测的性能,能够实现无缝扩展。Amazon SimpleDB 专门为较小的数据集提供了非关系型服务。通过从 Amazon EC2 和 Amazon EBS 的多种 AMI 中灵活选择,您可以全面掌控您的数据库,而没有预配置和安装硬件的负担。

这些备选项之间存在很大的不同,这使其中的某项可能更符合您的使用案例。

访问在 AWS 上运行数据库页面,以获取关于您应用程序的各种数据库备选方案的更多详细信息。

与 Amazon S3 不同,Amazon SimpleDB 并不存储原始数据。相反,它将您的数据视为输入并进行扩展来创建多个索引,从而让您能够快速地查询该数据。此外,Amazon S3 和 Amazon SimpleDB 使用不同类型的物理存储。Amazon S3 使用了优化的密集存储驱动器,以便经济高效地存储大型数据元。Amazon SimpleDB 可存储小型数据位,并使用了密度稍低的驱动器以优化数据访问速度。

为了优化您使用 AWS 服务的成本,应将大型数据元或文件存储在 Amazon S3 中,而最好将小型数据元素或文件指针(可能指向 Amazon S3 数据元)保存在 Amazon SimpleDB 中。由于各服务之间可紧密集成并且 AWS 环境内的数据传输免费,因此通过在应用程序中集成这两种服务,开发人员既可轻松利用 Amazon SimpleDB 的高速性能和查询功能,又能享受在 Amazon S3 中存储数据的低成本优势。

Amazon SimpleDB 当前支持单个域最高增长到 10GB。如果您的数据集大于 10GB,只需利用 Amazon SimpleDB 的扩展架构并将数据分布到多个域中即可。因为 Amazon SimpleDB 在设计时已考虑到并行机制,所以将数据分布到多个域中还可增加写入和读取吞吐量潜力。开始时,最多可为您分配 250 个域;如需增加域,请填写此表

如果想知道已经有多少位开发人员从联合使用 Amazon SimpleDB 和 Amazon S3 中获得了益处,请单击此处

使用 Amazon SimpleDB 时,预测结构化数据存储大小的最好方法如下所示:

所有项目 ID 的原始字节大小 (GB) + 每个项目 45 字节 + 所有属性名称的原始字节大小 (GB) + 每个属性名称 45 字节 + 所有属性-值对的原始字节大小 (GB) + 每个属性-值对 45 字节

要估算美国东部(弗吉尼亚北部)区域或美国西部(俄勒冈)区域的每月存储费用,请用得出的大小(以 GB 为单位)乘以 0.25 USD。在欧洲(爱尔兰)区域、亚太地区(新加坡)区域、亚太地区(悉尼)区域或美国西部(加利福尼亚北部)区域,请用得出的大小(以 GB 为单位)乘以 0.275 USD。在亚太地区(东京)区域,请用得出的大小(以 GB 为单位)乘以 0.276 USD。在南美洲(圣保罗)区域,请用得出的大小(以 GB 为单位)乘以 0.34 USD。

Amazon SimpleDB 根据用于完成特定请求(SELECT、GET、PUT 等)而使用的机器容量来计算每个请求的机器使用率和费用,标准大约为 2007 1.7 GHz Xeon 处理器的小时容量。机器使用率由每个请求处理的数据量(属性数、属性长度)决定。检索 256 个属性的 GET 操作使用的资源量高于仅检索 1 个属性的 GET 操作。检查 100000 个属性的多谓词 SELECT 的费用高于检查 250 个属性的单谓词查询。

在每个请求的响应消息中,Amazon SimpleDB 均会返回一个名为“Box Usage”的字段。Box Usage 用于衡量每个请求耗用的机器资源量。它不含带宽或存储。在报告时,Box usage 将作为完成特定请求所需机器小时数的一部分。在美国东部(弗吉尼亚北部)和美国西部(俄勒冈)区域,单个请求的费用为 Box Usage(以小时数表示)* 每 Amazon SimpleDB 机器小时 0.14 USD。所有请求的费用为 Box Usage(以小时数表示)的总和 * 0.14 USD。

例如,如果在一个月内,您请求的 Box Usage 总和使用了相当于一台 1.7 GHz Xeon 处理器 9 小时,则您的费用为:

9 小时 * 每 Amazon SimpleDB 机器小时 0.14 USD = 1.26 USD。

如果您的查询域位于欧洲(爱尔兰)区域、亚太地区(东京)、亚太地区(新加坡)、亚太地区(悉尼)或美国西部(加利福尼亚北部)区域,则 Amazon SimpleDB 的定价为每机器小时 0.154 USD。如果您的查询域位于南美洲(圣保罗)区域,则 Amazon SimpleDB 机器小时的定价为每机器小时 0.19 USD。所有费用计算应适当调整,以反映相关区域的定价。

使用本服务需遵守 Amazon Web Services 客户协议