Amazon SimpleDB 和 DynamoDB 用于存储博客文章



考虑一个简单的博客文章模式具有以下列

ID 
Author 
Category 
Status 
CreatedDateTime
UpdatedDateTime

所以假设以下查询

  • 查询ID
  • 作者查询,分页
  • 通过(作者,状态(查询,由CreateDateTime分类,分页
  • 通过(类别,状态(查询,由CreateDateTime分类,分页

所以似乎没有做太多工作,SimpleDB更容易实现代码?

SimpleDB几乎不受AWS的支持 - 您甚至无法在AWS控制台中找到它,因此,尽管它可能对您有用,但我个人会在Dynamphodb和DocumendDB之间做出决定(假设您想要nosql( - 在此时,没有任何理由在这样的旧产品上启动一个新项目。

您应该使用DynamoDB,因为它具有许多有用的功能,例如时间恢复点,交易,加密-AT-Rest和SimpledB没有的活动流。>

如果您在小规模上进行操作,DynamoDB的优势是您可以为桌子设置最大容量,这意味着您可以确保保持在免费层中。

如果您要大规模运行,dynamoDB会自动处理数据的所有分区(并且,并且出于所有实际目的,无限的容量(,而SimpledB的限制为每个域10 GB(又称"表"表"表"(,您需要管理跨您可能需要的域的任何水平分区。

最后,有一些迹象表明SimpleDB已经在折旧路径上。例如,如果您查看SimpleDB发行说明,您将看到最后一个更新是在2011年,而DynamoDB在上次RE:Invent Conference上宣布了几个新功能。此外,还有许多reddit帖子(例如,这里,这里和这里(,一般共识是SimpledB已经被弃用了,在某些线程中,Jeff Barr甚至发表了评论,并且没有任何矛盾的声明。简单B被弃用。


说,在DynamoDB中,您可以支持所需的查询。您将需要两个全局辅助索引,它们使用复合排序键。可以使用以下架构来支持您的查询:

  • ID - 桌子的哈希键
  • Author - Author-Status-CreatedDateTime-index
  • 的哈希密钥
  • Category - Category-Status-CreatedDateTime-index
  • 的哈希密钥
  • Status
  • CreatedDateTime
  • UpdatedDateTime
  • Status-CreatedDateTime - Author-Status-CreatedDateTime-indexCategory-Status-CreatedDateTime-index的键。这是一个复合属性,可以启用您的一些查询。它仅仅是带有分离器字符的Status的值(我假设此答案的其余部分是#(,而CreatedDateTime则将其附加到最后。(在这里个人意见:使用ISO-8601时间戳,而不是UNIX时间戳。这将使故障排除更加容易。(

使用此模式,您可以满足所有查询。

查询ID:只需使用博客文章ID在主表上执行GetItem请求。

作者查询,分页:Author = :author的关键条件表达式在Author-Status-CreatedDateTime-index上执行Query

查询(作者,状态(,由CreateDateTime排序,分页:Author = :author and begins_with(Status-CreatedDateTime, :status)的关键条件表达式在Author-Status-CreatedDateTime-index上执行Query。结果将按顺序返回CreatedDateTime

查询(类别,状态(,由CreateDateTime分类,分页:Author = :author and begins_with(Status-CreatedDateTime, :status)的关键条件表达式在Category-Status-CreatedDateTime-index上执行Query。结果将按照上升CreatedDateTime的顺序返回。(此外,如果您想在具有状态published的"技术"类别中获取所有博客文章,并在2019年创建,则可以使用Category = "technology" and begins_with(Status-CreatedDateTime, "published#2019")的关键条件表达式。

可以使用查询请求的ScanIndexForward字段来控制结果的排序顺序。默认值为true(排序升(;但是将其设置为false DynamoDB将以降序返回结果。

DynamoDB已构建支持查询操作的结果。基本上,每当有更多结果未返回时,查询响应都会包含一个lastEvaluatedKey,您可以将其传递到下一个查询请求中以接收您关闭的地方。(有关其工作方式的更多详细信息,请参见查询分页。(


另一方面,如果您已经熟悉SQL,并且想尽可能轻松地使其变得容易,请考虑仅使用Aurora无服务器数据API。

相关内容

  • 没有找到相关文章