2016-05-20 105 views
0

我有一个消息应用程序,其中所有消息按创建时间安排到季节。每季可能有数十亿条消息。我有一个任务是删除旧时段的消息。我想到了一个解决方案,其中涉及DynamoDB表创建/删除这样的:可以在DynamoDB中定期创建/删除表构建体系结构吗?

  1. 每个表中只包含一个赛季
  2. 当赛季变成“老”和消息不再需要,表被删除
  3. 的消息

这是一种很好的模式,它受亚马逊的鼓励吗?

PS:我问,因为我怕的两两件事,在不同的亚马逊服务满足 -

  1. 在亚马逊S3你要删除的各个项目,然后才能完全删除桶。当你拥有数十亿的物品时,它会变成真正的痛苦。
  2. 在亚马逊SQS中,存在“不需要的行为”的概念。在使用SQS API时,您可能会对SQS基础架构(例如不轮询消息)采取严格的行为,因此可能会受到惩罚。

回答

1

是的,这是一个可接受的设计模式,它实际上遵循AWS团队提出的最佳实践,但有些事情需要考虑您的特定用例。

  • AWS对每个区域有256个表限制,但可以提高。如果你预计需要比这个多几个数量级,你应该重新评估。
  • 您可以删除表中仍包含记录的DynamoDB表,如果您有大量记录,则必须定期删除此实际上是使用滚动表集的最佳做法
  • 创建和删除表为一个异步操作,所以你不想让你的应用程序依赖于这些操作完成的时间。确保您在需要它们之前尽早创建表格。在正常情况下,表格只需几秒到几分钟即可完成,但在非常非常罕见的停电情况下,我发现它需要几个小时。

Understand Access Patterns for Time Series Data states的DynamoDB最佳实践文档...

您可以通过将“热”在一个表 更高的吞吐量设置另一个表中的项目,和“冷”项目上节约资源与 较低的吞吐量设置。您可以通过简单地删除 表删除旧的项目。您可以选择将这些表备份到其他存储 选项,如Amazon Simple Storage Service(Amazon S3)。删除 整个表的效率比逐个删除项目 的效率显着更高,这实际上是写入吞吐量的两倍,因为您执行的操作数与删除操作的数量相比减少了 。

1

按照您描述的方式拆分数据是完全可以接受的。您可以删除DynamoDB表,而不管其大小包含多少个项目。

据我所知,在删除或创建表格所需的时间内没有明确的SLA(意味着无法知道是要花费2秒钟还是2分钟或20分钟),但只要您解决方案不依赖于这种时机你很好。

实际上,基于年龄对数据进行分片的想法有可能显着提高应用程序的性能,并且肯定会帮助您控制成本。