Amazon SDB 是一个快速的可伸缩实时数据集索引和查询框架,基于 Amazon Web Services 的应用程序可以用它轻松地存储和获取结构化数据。它能够与其他 Amazon Web Services 很好地协作,比如 Elastic Compute Cloud (EC2) 和 Simple Storage Service (S3)。可以使用 SDB 在 Amazon Web Services 环境中构建完整的应用程序组合。只需根据使用量为服务付费。还提供一定的免费使用量。
SDB 提供的特性包括:
-
可靠性
- SDB 跨多个数据中心冗余地存储带索引的数据,保证它们随时可用。 速度
- SDB 能够快速地获取数据,尤其是在 Amazon Web Services 环境中从 EC2 实例发出请求时。 简单性
- 访问和使用 SDB 的编程模型非常简单,而且可以从多种编程语言使用 SDB。 安全性
- SDB 提供很高的安全水平。只允许授权的用户访问数据。 灵活性
- SDB 支持动态地存储数据,不需要预先定义的模式。 低成本
- SDB 的费用非常低廉。只需根据实际使用量付费。
下面讨论支撑 SDB 的概念。
域 是存储结构化数据和运行查询的容器。在域中存储的数据称为条目 。从概念上说,域与电子表格中的工作 单标签相似;条目与电子表格中的行相似。可以对域运行查询,但是当前的 SDB 版本还不支持跨域查询。
每个域与下面的元数据相关联:
- 最后一次更新元数据的日期和时间
- 域中条目的数量
- 域中属性名-值对的数量
- 域中独特属性名的数量
- 域中所有条目名的总大小(字节数)
- 域中所有属性值的总大小(字节数)
- 域中所有独特属性名的总大小(字节数)
与 Simple Queue Service (SQS) 一样,SDB 也采用 “最终一致性” 模型。SDB 维护每个域的多个拷贝,从而提供容错能力。对域的每个修改都会传播到所有拷贝。
根据系统负载和网络延时不同,这个操作有时候要花费几秒时间,所以域的消费者可 能无法立即看到修改。修改最终会传播到整个 SDB,但是在设计基于 SDB 的应用程序时一定要考虑到传播延时的影响。
条目 代表域中的对象,它们包含属性和值。从概念上说,条目与电子表格中的行相似 — 属性是列,值是单元格。属性可以包含多个值。无论数据结构是什么样的,SDB 都会自动地为域编制索引。
SDB 还对针对域执行的查询有时间限制。如果查询花费的时间超过 5 秒,SDB 就会停止查询并返回一个错误。
SDB 中的域很灵活,没有任何固定的模式。域中的每个条目可以包含一组独特的属性(不超过 256 个)。属性甚至可以与域中其他条目的所有其他属性完全不同。
当前的 SDB 版本有一些限制,在设计应用程序时应该考虑到这些限制。表 1 给出这些限制(取自 Amazon 的最新文档)。
参数 | 当前限制 |
---|---|
域大小 | 每个域 10 GB 250,000,000 个属性名-值对 3-255 个字符(a-z、A-Z、0-9、'_'、'-' 和 '.') |
每个 Amazon Web Services 账户的域数量 | 100 |
属性 | 每个 条目中的名-值对数量是 256。 名称长度是 1024 字节。 值长度是 1024 字节。 只允许使用在 XML 文档中合法的 UTF-8 字符。不允许使用控制字符和在 XML 中非法的任何字符序列。 每个PutAttributes 操作处理的属性数限制为 100。每个 Select 或 QueryWithAttributes 操作请求的属性数限制为 256。 |
查询响应中的最大条目数 | 256 |
最大查询执行时间 | 5 秒 |
每个查询表达式的最大谓词数 | 10 |
每个查询表达式谓词的最大比较数 | 10 |
每个选择表达式的最大独特属性数 | 20 |
每个选择表达式的最大比较数 | 20 |
QueryWithAttributes 和 Select 的最大响应大小 | 1 MB |
要想开始使用 SDB,首先需要注册一个 Amazon Web Services 账户(见 参 考资料 )。本系列的 第 2 部分 详细介绍了如何注册 Amazon Web Services 账户。创建 Amazon Web Services 账户之后,必须为账户启用 Amazon SDB 服务:
与任何 Amazon Web Services 的所有通信都要通过 SOAP 接口或查询接口。在本文中,通过一个第三方库使用查询接口与 SDB 通信。
需要获得自己的访问键,可以通过在 Web Services 帐户信息 页面上选择 View Access Key Identifiers 获得访问键。现在设置了 Amazon Web Services 并为账户启用了 SDB 服务。
这个示例使用第三方开放源码 Python 库 boto ,通过在 Python shell 中运行代码片段熟悉 SDB。
下载 boto 。 撰写本文时的最新版本是 1.6b。把存档文件解压到您选择的目录中。进入此目录并运行 setup.py
把 boto 安装到本地 Python 环境中,见清单 1。
|
设置一些环境变量,引用 Amazon Web Services 访问键。可以从 Web Services 帐户信息 页面获得访问键。
|
启动 Python shell 并导入 boto 库,从而确认所有设置都是正确的,见清单 3。
|
使用 SDBConnection
类提供与 SDB 交互的主要接口。从 Python 控制台使用 boto。示例调用 SDBConnection
对象上的不同方法,然后查看 SDB 返回的响应,这有助于熟悉 API 和体验 SDB 概念。
第一步是使用前面导出到环境中的 Amazon Web Services 访问键,创建一个连接到 SDB 的连接对象。boto 库总是先检查是否设置了这些环境变量。如果设置了这些变量,boto 在创建连接时自动地使用它们。
|
然后,可以使用上面创建的 sdb_conn
对象与 SDB 交互。可以通过指定域名创建新的域。
|
获取所有域的列表,这返回一个结果集对象,它实际上是一个 Python 列表,见清单 6。可以循环遍历这个列表并访问每个域的所有相关信息。
|
还可以按名称获取单一域。
|
当然,在添加条目之前,刚创建的域是空的。在域中创建一个新条目,然后在其中添加属性。
|
可以通过指定条目名从域中获取条目。条目名必须是惟一的,这与关系数据库中的主键概念相似。
|
返回的条目对象是一个动态的 Item
对象。在访问任何属性时,它会自动地从 SDB 获取条目的所有属性。对条目属性值的任何更新会自动保存到 SDB 中。
>>> my_item['cars'] |
还可以通过使用 SDBConnection
类并指定域和条目名来获取条目和属性。
|
如果一个条目没有任何属性,SDB 就会自动删除它。还可以显式地删除条目及其属性。
|
|
SDB 提供一种用于搜索结构化数据的定制查询语言,可以查询与条目相关联的属性名-值对。查询表达式的基本组成部分称为谓词 。 每个谓词由方括号限定,其中包含属性、比较操作符和要比较的值。例如,谓词 ['desc' = 'Hello Devworks']
定义针对 desc
属性的相等比较。每个谓词单独计算并产生一组条目名。可以使用 union
和 intersection
等集操作符组合多个谓词,从而构建复杂的查询。
在查询中使用谓词时,一定要考虑到 SDB 按照词典次序执行所有谓词比较。必须确保数据以适当的字符串形式存储在属性中。注意,如果查询花费的时间超过 5 秒,SDB 就会自动终止它。
|
>>> rs = d2.query("['make' = 'BMW']") |
>>> rs = d2.query("['make' = 'BMW'] intersection ['year' = '2007']") |
这种查询语言支持多种比较操作符。它允许执行范围查询和多值属性查询。强烈建议您阅读 Amazon Web Services 提供的介绍查询语言的文章,了解它提供的所有功能及创建和调整查询的最佳实践。
还可以获取域的元数据,从而了解域中的条目总数等信息。
>>> my_domain = sdb_conn.get_domain('devworks-dom-2') |
本文介绍了 Amazon 的 SDB 服务。您学习了一些基本概念和 boto(一个用于与 SDB 交互的开放源码 Python 库)提供的一些功能。
学习
- 通 过 developerWorks 云计算空间 了解云计算的重要性、如何入门及更多信息。
- 阅读这个 “用 Amazon Web Services 进行云计算 ” 系列的其他部分:
- 第 1 部分 “简 介:选择租用而不是购买 ”
- 第 2 部分 “用 Amazon Simple Storage Service (S3) 在云中存储数据 ”
- 第 3 部分 “用 EC2 根据需要提供服务器 ”
- 第 4 部分 “用 SQS 进行可靠的消息传递 ”
- 了解各种 Amazon Web Services 的相关信息:
- Amazon Simple Storage Service (S3)
- Amazon Elastic Compute Cloud (EC2)
- Amazon Simple Queue Service (SQS)
- Amazon SimpleDB (SDB)
- Service Health Dashboard 由 Amazon 团队负责更新,提供每个服务的当前状态。
- 博客 及时提供 Amazon Web Services 的最新动态。
- 注 册 一个 Amazon Web Services 账户。
- Amazon Web Services Developer Connection 提供开发人员需要的所有参考资料。
- SDB 技术资源 向开发人员提供技术文档、用户指南和其他参考资料。
- Amazon SimpleDB 开发人员指南 提供 SDB 服务的各个组件的相关信息,以及高级使用方法和配置。
- 阅读教程 “Query 101: Building Amazon SimpleDB Queries ”,通过大量实践示例了解如何构造 Amazon SimpleDB 查询。
- 阅读教程 “Query 201: Tips & Tricks for Amazon SimpleDB Query ”,学习如何构造高效的查询,包括查询日 期和优化查询的性能。
- 使用 Simple Monthly Calculator 工具计算 SDB 和其他 Amazon Web Services 的每月使用费用。
获得产品和技术
讨论
参 与 developerWorks blogs 并加入 developerWorks 社区 。