【发布时间】:2018-02-19 22:15:40
【问题描述】:
我有一个用例,我需要将 ttl 列添加到现有表中。目前,该表有超过 20 亿条记录。
是否有任何现有的解决方案围绕相同的构建?或者应该是 emr 是前进的道路?
【问题讨论】:
标签: amazon-dynamodb emr amazon-emr amazon-data-pipeline data-pipeline
我有一个用例,我需要将 ttl 列添加到现有表中。目前,该表有超过 20 亿条记录。
是否有任何现有的解决方案围绕相同的构建?或者应该是 emr 是前进的道路?
【问题讨论】:
标签: amazon-dynamodb emr amazon-emr amazon-data-pipeline data-pipeline
DynamoDB 不支持跨越主键边界的更新操作。而对于读取数据,唯一跨越分区边界的操作是 Scan。
因此,不幸的是,为表中的所有项目添加属性(DynamoDB 是文档数据库,因此没有列这样的概念)的唯一方法是实际为每个项目执行 Put。
如果您的表中有大约 20 亿个项目,那将是 20 亿次写入。
当然,您可以使用 EMR 和 Hive 连接到表并执行 SQL 样式更新以添加 TTL 属性,但它仍将转换为 20 亿个单独的 PutItem 请求,因此需要一段时间或相当长的时间运行成本很高。
如果您想要添加 TTL 的原因是因为您试图删除表中的大量项目,也许更好的方法是创建一个新表,使用 TTl 复制您需要的记录和所有,然后删除旧表。
【讨论】:
它不受直接支持,但您很幸运,最近发布的 this AWS blog post 深入介绍了该过程。
【讨论】: