这是我第一次使用 NoSQL 数据库,所以我真的很困惑。我真的很感激我能得到的任何帮助。
我想在我的表中存储包含公告的数据。本质上,每个公告都有一个 ID、一个日期和一个文本。
例如,公告的 ID 可能为 1,日期为 2014/02/26,文本为“这是一个示例公告”。较新的公告总是比旧的公告具有更大的 ID 值,因为它们是稍后添加到表中的。
我想在这个表上运行两种类型的查询:
所以我设置了具有以下属性的表:
ID(数字)作为主键,以及
日期(字符串)作为范围
这适合我的用例吗?如果是这样,我应该运行什么样的查询/读取/请求/扫描/什么(我也对这里的术语感到困惑)来完成我想做的两种类型的查询?
任何帮助将不胜感激。谢谢!
最佳答案
你走在正确的轨道上。
至于排序,DynamoDB 将按范围键排序,因此日期可以工作,但我建议将其存储为数字,可能是自 Unix 纪元以来的毫秒数,而不是字符串。这将使根据创建日期按升序或降序获取公告变得微不足道。
有关本地与全局二级索引及其提供的功能的概述,请参阅此答案:Optional secondary indexes in DynamoDB
就检索所有项目而言,您需要执行扫描。扫描不如查询有效,但由于所有 Dynamo 都在 SSD 上,因此它们仍然相对较快。通过查询获得的扫描无法获得单位数毫秒的性能,因此如果有一种方法可以将公告与用户 ID 相关联,那么您可能会获得比扫描更好的性能。
请注意,您不能在创建表后修改表架构(散列键、范围键和索引)。有多种方法可以手动迁移表或导入/导出它,但重点是您应该预先仔细考虑当前和 future 的查询需求,并设计表以支持它们。但是,添加或停止存储非键或非项目属性非常容易,这提供了很好的灵活性。
最后,尽量避免将 Dynamo 视为关系型。使用 Dynamo,在很多情况下,您最好对某些数据进行反规范化或复制,以换取快速查询性能。
关于amazon-web-services - nosql/dynamodb 哈希和范围用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056638/