【问题标题】:nosql/dynamodb hash and range use casenosql/dynamodb 哈希和范围用例
【发布时间】:2014-02-27 08:59:02
【问题描述】:

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

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

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

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

  1. 我想检索按日期排序的公告文本。
  2. 我想检索最近 x 个公告(例如,最近 3 个公告)的文本和日期。

所以我设置了具有以下属性的表: ID(数字)作为主键,以及 日期(字符串)作为范围

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

任何帮助将不胜感激。谢谢!

【问题讨论】:

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


    【解决方案1】:

    你在正确的轨道上。

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

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

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

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

    最后,尽量避免将 Dynamo 视为关系型。使用 Dynamo,在很多情况下,您最好对一些数据进行反规范化或复制,以换取快速的查询性能。

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2015-12-26
    • 2012-01-26
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多