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