2014-02-27 51 views
4

这是我第一次使用NoSQL数据库,所以我非常困惑。我非常感谢我能得到的任何帮助。nosql/dynamodb哈希和范围用例

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

因此,例如,公告可能有1号,2014年2月26日的日期,以及“这是一个范例公告”的文字。较新的公告总是具有比旧公告更大的ID值,因为它们稍后被添加到表中。

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

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

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

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

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

回答

11

你是在正确的轨道上。

至于排序,DynamoDB将通过一系列关键排序,所以日期将工作,但我建议你把它作为一个数字,自Unix纪元或许毫秒,而不是字符串。这将使根据创建日期以升序或降序获得公告的微不足道。

看到这个答案的地方VS全球二级指标和它们提供的功能的概述:Optional secondary indexes in DynamoDB

至于获取的所有项目,你需要进行扫描。扫描不如查询高效,但由于Dynamo全部位于SSD上,因此它们相对较快。通过扫描得到的查询不会获得单位数毫秒的性能,因此如果有方法将公告与用户ID相关联,则可能会获得比扫描更好的性能。

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

最后,尽量避免迪纳摩的思维关系。使用Dynamo,在很多情况下,为了快速查询性能,您最好能够正常化或复制一些数据。

+0

谢谢你的帮助! –