nosql / dynamodb哈希和范围用例

时间:2014-02-27 00:32:12

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

这是我第一次使用NoSQL数据库,所以我真的很困惑。我真的很感激我能得到的任何帮助。

我想在我的表格中存储包含公告的数据。基本上,每个公告都有ID,日期和文本。

因此,例如,公告可能具有ID为1,日期为2014/02/26,以及“这是示例公告”的文本。较新的公告总是具有比旧公告更大的ID值,因为它们稍后会添加到表中。

我想在此表上运行两种类型的查询:

  1. 我想检索按日期排序的公告文本。
  2. 我想检索x个最新公告的文本和日期(比如最近的3个公告)。
  3. 所以我设置了具有以下属性的表: ID(数字)作为主键,和 date(字符串)作为范围

    这适用于我的用例吗?如果是这样,我应该运行什么样的查询/读取/请求/扫描/其他(我真的对这里的术语感到困惑)来完成我想要的两种类型的查询?

    非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:11)

你走在正确的轨道上。

就排序而言,DynamoDB将按范围键排序,因此日期将起作用,但我建议将其存储为数字,自Unix纪元以来可能是毫秒,而不是字符串。这将使根据创建日期按升序或降序获取通知变得微不足道。

有关本地和全局二级索引及其提供的功能的概述,请参阅此答案:Optional secondary indexes in DynamoDB

就检索所有项目而言,您需要执行扫描。扫描不如查询效率高,但由于所有Dynamo都在SSD上,因此它们仍然相对较快。使用查询获得的扫描不会获得单位数的毫秒级性能,因此,如果有一种方法可以将通知与用户ID相关联,则可能会获得比扫描更好的性能。

请注意,在创建表后,无法修改表模式(散列键,范围键和索引)。有一些方法可以手动迁移表或导入/导出表,但重点是您应该预先考虑当前和未来的查询需求并设计表以支持它们。但是,添加或停止存储非键或非项属性非常容易,这提供了很好的灵活性。

最后,尽量避免将Dynamo视为关系型。使用Dynamo,在很多情况下,您可能会更好地规范化或复制某些数据以换取快速查询性能。