17

我刚刚开始研究亚马逊的 DynamoDB。显然,可伸缩性很有吸引力,但我正试图让我的头脑脱离 SQL 模式并进入 no-sql 模式。可以做到这一点(具有 dynamodb 的所有可扩展性优势):

有大量按某个数字索引的条目(比如 5 到 1000 万)。每个条目中的一个字段将是创建日期。dynamo db 是否有一种有效的方法可以为我的网络应用程序提供两个日期之间创建的所有条目?

一个更简单的问题 - dynamo db 可以给我一个字段与某个数字匹配的所有条目。也就是说,将有另一个字段是一个数字,为​​了论证的缘故,让我们说介于 0 和 10 之间。我可以要求 dynamodb 给我所有具有值的条目,例如 6 吗?

这两个查询是否都需要扫描整个数据集(我认为这是给定数据集大小的问题?)

非常感谢

4

1 回答 1

20

dynamo db 是否有一种有效的方法可以为我的网络应用程序提供两个日期之间创建的所有条目?

是的,请看一下Amazon DynamoDB 数据模型中的主键概念,特别是哈希和范围类型主键

在这种情况下,主键由两个属性组成。第一个属性是哈希属性,第二个是范围属性。Amazon DynamoDB 在散列主键属性上构建无序散列索引,在范围主键属性上构建排序范围索引。[...]

列出的示例完全符合您的用例,即回复(Id,ReplyDateTime,...)表有助于具有哈希属性Id和范围属性ReplyDateTime的Hash 和 Range类型的主键。

您将通过查询API 使用它,有关详细信息,请参阅RangeKeyCondition在 Amazon DynamoDB 中查询表以获取相应示例。

dynamo db 可以给我一个字段与某个数字匹配的所有条目。[...] 我可以要求 dynamodb 给我所有具有值的条目,例如 6 吗?

这也是可能的,尽管仅通过Scan API(即确实需要读取表中的每个项目),请参阅ScanFilter了解详细信息,并查看Amazon DynamoDB 中的扫描表以获取相应示例。

这两个查询是否都需要扫描整个数据集(我认为这是给定数据集大小的问题?)

如前所述,第一种方法与Query一起使用,而第二种方法需要Scan,并且通常,查询操作比扫描操作更有效- 这是一个很好的入门建议,尽管细节更复杂并且取决于您的使用情况,请参阅Amazon DynamoDB中的查询和扫描概述中的扫描和查询性能部分:

为了加快响应时间,请以可以使用 Query、Get 或 BatchGetItem API 的方式设计您的表。或者,将您的应用程序设计为以一种对表请求率的影响最小化的方式使用扫描操作。有关更多信息,请参阅Amazon DynamoDB 中的预置吞吐量指南

So, as usual when applying NoSQL solutions, you might need to adjust your architecture to accommodate these constraints.

于 2012-02-06T20:28:17.963 回答