Amazon dynamodb 亚马逊SimpleDB&;用于存储博客文章的DynamoDB
假设一个简单的博客帖子模式包含以下列Amazon dynamodb 亚马逊SimpleDB&;用于存储博客文章的DynamoDB,amazon-dynamodb,amazon-simpledb,Amazon Dynamodb,Amazon Simpledb,假设一个简单的博客帖子模式包含以下列 ID Author Category Status CreatedDateTime UpdatedDateTime 因此,假设以下查询 按ID查询 按作者查询,分页 查询依据(作者,状态),按CreatedDateTime排序,分页 查询依据(类别、状态),按CreatedDateTime排序,分页 因此,如果不做太多工作,SimpleDB将更容易实现代码?SimpleDB几乎不再受到AWS的支持-您甚至无法在AWS控制台中找到它,因此,尽管它
ID
Author
Category
Status
CreatedDateTime
UpdatedDateTime
因此,假设以下查询
- 按ID查询
- 按作者查询,分页
- 查询依据(作者,状态),按CreatedDateTime排序,分页
- 查询依据(类别、状态),按CreatedDateTime排序,分页
因此,如果不做太多工作,SimpleDB将更容易实现代码?SimpleDB几乎不再受到AWS的支持-您甚至无法在AWS控制台中找到它,因此,尽管它可能适合您,但我个人将在DynamoDB和DocumentDB之间做出决定(假设您需要NoSQL)-现在不要认为有任何理由在这样一个旧产品上启动新项目。您应该使用DynamoDB,因为它有许多有用的功能,如、和SimpleDB没有的功能 如果您是在小规模上操作,DynamoDB的优势是它允许您为您的表设置最大容量,这意味着您可以确保您保持在空闲层 如果您在更大范围内运行,DynamoDB会自动处理您的数据的所有分区(并且,出于所有实际目的,它具有无限的容量),而每个域(也称为“表”)和您都需要管理可能需要的跨域的任何水平分区 最后,有迹象表明SimpleDB已经走上了弃用的道路。例如,如果您查看,您将看到上一次更新是在2011年,而DynamoDB在上一次re:Invent会议上发布了几个新特性。此外,还有许多reddit帖子(如、和)普遍认为SimpleDB已经被弃用,在一些线程中,甚至对SimpleDB进行了评论,并且没有反驳任何关于SimpleDB已被弃用的断言
也就是说,在DynamoDB中,您可以支持所需的查询。 您将需要两个,使用一个。以下架构支持您的查询:
-表的哈希键ID
-作者状态CreatedDateTime索引的哈希键作者
-类别状态CreatedDateTime索引的哈希键类别
状态
CreatedDateTime
updateDateTime
-作者状态CreatedDateTime索引的排序键和类别状态CreatedDateTime索引。这是一个复合属性,用于启用某些查询。它只是带有分隔符的Status CreatedDateTime
的值(我假设在本答案的其余部分为Status
),并在末尾附加#
。(个人观点:使用时间戳而不是unix时间戳。这将使故障排除更加容易。)CreatedDateTime
Author=:Author
对作者状态CreatedDateTime索引执行
查询依据(作者、状态),按CreatedDateTime排序,分页:
对作者状态CreatedDateTime索引执行查询
,关键字条件表达式为作者=:作者并以(状态CreatedDateTime,:状态)
。结果将按升序CreatedDateTime
返回
查询依据(类别、状态),按CreatedDateTime排序,分页:
使用键条件表达式Author=:Author并以(Status CreatedDateTime,:Status)
开始,对类别状态CreatedDateTime索引执行查询。结果将按升序CreatedDateTime
返回。(此外,如果您希望获得“技术”类别中状态为“已发布”且创建于2019年的所有博客帖子,您可以使用关键条件表达式category=“technology”,并以(status CreatedDateTime,“published#2019”)
开头
可以使用查询请求的ScanIndexForward
字段控制结果的排序顺序。默认值为true
(升序排序);但将其设置为false
DynamoDB将按降序返回结果
DynamoDB内置了对查询操作结果分页的支持。基本上,任何时候有更多未返回的结果时,查询响应都将包含一个lastEvaluatedKey
,您可以将其传递到下一个查询请求中,以选择停止的位置。(有关其工作方式的更多详细信息,请参阅。)
P>另一方面,如果您已经熟悉SQL,并且希望尽可能地使这一点变得容易,请考虑使用.< /p>您检查这是一个很好的答案。因为OP尚未创建表,所以考虑全局性可能是明智的。此外,<代码状态>作者创建日期< /代码>索引可能不会生成D。仅通过代码>作者<代码>的查询顺序。取决于OP所需要的。为此,考虑将表的范围键设置为<代码>作者<代码>。总之,<代码> ID <代码>的哈希键、代码的范围键>作者< /代码>,以及Mathew所提出的两个二级索引。我不允许您按作者进行查询。最佳做法是始终优先使用GSIs而不是LSIs。Gah,如果ID
是分区键,则您在范围键上是正确的。只有当作者的所有文章都散列到同一分区中时,它才会起作用。这也会扼杀使用LSIs的想法。不同的散列键将