从DynamoDB中获取值

时间:2012-02-06 19:51:46

标签: database nosql amazon-web-services amazon-dynamodb

我刚刚开始研究亚马逊的DynamoDB。显然可扩展性很吸引人,但我试图让我的脑子脱离SQL模式并进入无sql模式。可以这样做(具有dynamodb的所有可扩展性优势):

有一些条目(例如500万到1000万)被一些数字索引。每个条目中的一个字段将是创建日期。是否有一种有效的方法让dynamo db为我的Web应用程序提供在两个日期之间创建的所有条目?

一个更简单的问题 - 发电机数据库可以给我一个字段匹配某个数字的所有条目。也就是说,还有另一个字段是一个数字,为​​了参数,我们可以说在0到10之间。我可以要求dynamodb给我所有有价值的条目,例如6?

这两个查询都需要扫描整个数据集(考虑到数据集大小,我认为这是一个问题吗?)

非常感谢

1 个答案:

答案 0 :(得分:20)

  

是否有一种有效的方法让dynamo db全部提供我的网络应用程序   在两个日期之间创建的条目?

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

  

在这种情况下,主键由两个属性组成。首先   attributes是哈希属性,第二个是范围   属性。 Amazon DynamoDB在哈希上构建无序哈希索引   主键属性和主要范围上的排序范围索引   关键属性。 [...]

列出的示例完全以您的用例为特色,即 Reply(Id,ReplyDateTime,...)表有助于使用哈希和范围类型的主键哈希属性 Id 和范围属性 ReplyDateTime

您将通过Query API使用此功能,有关详细信息,请参阅 RangeKeyCondition ;有关各个示例,请参阅Querying Tables in Amazon DynamoDB

  

发电机db可以给我一个字段匹配某个条目的所有条目   数。 [...]我可以要求dynamodb给予   我所有有价值的条目,例如6?

这也是可行的,虽然只能通过Scan API(即确实需要读取表中的每个项目),有关详细信息,请参阅 ScanFilter 和{{3}各个例子。

  

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

如上所述,第一种方法适用于查询,而第二种方法需要扫描,而通常,查询操作比扫描操作更有效< / em> - 这是一个很好的建议,虽然细节更复杂并且取决于您的使用案例,请参阅Scanning Tables in Amazon DynamoDB概述中扫描和查询性能部分:

  

为了缩短响应时间,请以可以使用的方式设计表格   相反,Query,Get或BatchGetItem API。或者,设计你的   应用程序以最小化影响的方式使用扫描操作   在你的桌子上的请求率。有关详细信息,请参阅Query and Scan in Amazon DynamoDB

因此,像往常一样,在应用NoSQL解决方案时,您可能需要调整架构以适应这些约束。