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
  • Status CreatedDateTime
    -作者状态CreatedDateTime索引的排序键和类别状态CreatedDateTime索引。这是一个复合属性,用于启用某些查询。它只是带有分隔符的
    Status
    的值(我假设在本答案的其余部分为
    #
    ),并在末尾附加
    CreatedDateTime
    。(个人观点:使用时间戳而不是unix时间戳。这将使故障排除更加容易。)
使用此模式,您可以满足所有查询

按ID查询: 只需使用blog post Id在主表上执行一个请求

按作者查询,分页: 使用键条件表达式
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的想法。不同的散列键将