Java 在DynamoDB上管理开发/登台/生产-冲突的方法。是否使用DynamoDB映射器使用一种方法?

Java 在DynamoDB上管理开发/登台/生产-冲突的方法。是否使用DynamoDB映射器使用一种方法?,java,amazon-dynamodb,Java,Amazon Dynamodb,这个问题是两年前在这里提出的: 这里也有: 公认的答案是创建单独的账户,合并计费。似乎存在着相互冲突的方法。 例如,Peter Sankauskas在他的评论中指出,这不再是“标准方式” 他的建议是使用: “使用标记和命名约定来分隔暂存和生产。” 当使用JavaSDK DynamoDBMapper将表名植入注释时,他的解决方案是否仍然有效 谢谢。 (附言:我本想加一条评论,但我没有声誉。)我会解释我们公司是如何做到这一点的 我们所有的DynamoDB表都有一个前缀(dev_tables/stag

这个问题是两年前在这里提出的: 这里也有:

公认的答案是创建单独的账户,合并计费。似乎存在着相互冲突的方法。 例如,Peter Sankauskas在他的评论中指出,这不再是“标准方式”

他的建议是使用: “使用标记和命名约定来分隔暂存和生产。”

当使用JavaSDK DynamoDBMapper将表名植入注释时,他的解决方案是否仍然有效

谢谢。
(附言:我本想加一条评论,但我没有声誉。)

我会解释我们公司是如何做到这一点的

我们所有的DynamoDB表都有一个前缀(dev_tables/stage_tables/prod_tables)

我们有一个DBConstants.java文件,其中包含两组最终字符串。一个用于表名,另一个用于前缀+“\u”+表名

所有映射程序文件都从DBConstans.ACTUAL_table_name获取表名

我们在调试时在它们之间进行本地切换


在Jenkins中,我们的Gradle构建知道在编译dev/stage/prod jar之前选择正确的前缀。

DynamoDBMapper构造函数采用dynamdbapperconfig,它可以具有“TableNameOverride”属性。可以将其配置为覆盖带注释的表名。有关如何执行此操作的想法,请参见此答案-

DynamodbMapper API(查询/扫描等)也接受DynamodbMapperConfig对象。即使在操作级别中,也可以使用此选项覆盖表名

那么,来谈谈你的问题-
我认为最好将生产和测试分开。这是因为,如果由于代码中的错误而损坏了生产表中的数据,则除非有健全的备份/恢复机制,否则很难恢复。如果您还想继续这样做,您可以根据上面的示例基于阶段配置表前缀。

感谢分享@Chen,我正试图避免为不同的环境进行单独的构建,但我认为您的解决方案已经为我提供了认识其局限性所需的洞察力。