围绕在DynamoDB中定期创建/删除表来构建体系结构是否可以?

时间:2016-05-20 17:30:23

标签: amazon-dynamodb

我有一个消息传递应用程序,其中所有消息按创建时间排列到季节。每个季度可能有数十亿条消息。我有一项任务是删除旧季的消息。我想到了一个解决方案,它包括如下所示的DynamoDB表创建/删除:

  1. 每个表格只包含一个季节的消息
  2. 当季节变得“老”时并且不再需要消息,表格已删除
  3. 它是一个好的模式,是否受到亚马逊鼓励?

    ps:我问,因为我害怕两件事,在不同的亚马逊服务中遇到过 -

    1. 在Amazon S3中,您必须删除每个项目才能完全删除存储桶。当你有数十亿的物品时,它就变成了真正的痛苦。
    2. 在亚马逊SQS中,有一种“不受欢迎的行为”的概念。使用SQS api时,您可能会对SQS基础架构采取严厉措施(例如,不轮询消息),因此可能会因此受到处罚。

2 个答案:

答案 0 :(得分:1)

以您描述的方式分割数据是完全可以接受的。您可以删除DynamoDB表,无论其包含的项目大小如何。

据我所知,删除或创建表所需的时间没有明确的SLA(这意味着无法知道它是否需要2秒或2分钟或20分钟)但是只要你的解决方案不依赖于这种时间,你就可以了。

事实上,根据年龄分割数据的想法有可能显着提高应用程序的性能,并且肯定会帮助您控制成本。

答案 1 :(得分:1)

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

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

关于Understand Access Patterns for Time Series Data states ...

的DynamoDB最佳实践文档
  

您可以通过存储" hot"来节省资源。一个表中的项目   更高的吞吐量设置,"冷"另一个表中的项目   较低的吞吐量设置您只需删除即可删除旧项目   表格。您可以选择将这些表备份到其他存储   Amazon Simple Storage Service(Amazon S3)等选项。正在删除   整个表比删除项目更有效   一个接一个,它基本上使您的写吞吐量翻倍   与put操作一样多的删除操作。