amazon-dynamodb - AWS DynamoDB 命名约定

标签 amazon-dynamodb

我正在尝试为 DynamoDB 中的不同对象创建命名约定,例如表、分区和排序键、LSI、GSI、属性等。我读了很多文章,但没有通用的方法可以做到这一点,但是希望从实时示例中学习以选择最适合我们需求的一个。

我正在开发的基础设施是基于微服务的。除此之外,我们的一些开发环境共享相同的 AWS 帐户。基于此,我最终得到了这样的结果:

Tables: [Environment].[Service Name].[Table Name].ddb-table
GSIs/LSIs: [Environment].[Service Name].[Table Name].[GSI/LSI Name].ddb-[gsi/lsi]
Partition Key: pk ??? (in my understanding, the keys should have abstract names, because the single table stores versatile data in the same key)
Sort Key: sk ??? (in my understanding, the keys should have abstract names, because the single table stores versatile data in the same key)
Attributes: meaningful but as short as possible as they are kept for every item in the table
  • 不同元素之间用点(.)分隔
  • 所有名称均以短划线(短横线)和小写字母分隔
  • 表/GSI/LSI 采用单数形式

这是一个例子:

Table: dev.user-service.user-order.ddb-table
LSI: dev.user-service.user-order.lsi1pk.ddb-lsi
GSI: dev.user-service.user-order.gsi1pk.ddb-gsi

您遵循哪些命名约定? 预先非常感谢!

最佳答案

我的建议:

  • 使用 PK 和 SK 作为分区键和排序键。
  • 不要将表名放入代码中。使用参数存储。例如,如果您曾经执行过表恢复,则它将恢复到新的表名称,并且如果您想将流量发送到新名称,您将不需要更改代码。
  • 因此,不要太固定于任何特定的表名称。切勿尝试让代码预测表名。只有让他们始终如一地帮助人类。
  • 不要在表名称中添加区域。当您切换到全局表时,它们都保留相同的名称。尴尬!
  • GSI 可以称为 GSI1、GSI2 等。GSI key 为 GSI1PK 和 GSI1SK 等。
  • 如果您想稍后跟踪每张 table 的费用,请用 table 名称标记您的 table 。
  • 简短而有意义的属性名称很好,因为它可以减少存储空间,并且如果接近 4kb 或 1kb 行,还可以减少 RCU/WCU。
  • 对开发、暂存和生产使用差异帐户。如果您还想将名称放入表格中以帮助您发现“天哪,我正在生产中”,那就没问题了。
  • 如果您有很多属性作为项目有效负载,这些属性不用于 GSI 或过滤并且始终一起返回,请考虑将它们存储为在客户端进行解析的字符串或二进制文件。您甚至可以压缩它们。由于它跳过了数据编码(marshal)处理,因此效率更高、延迟更低。

关于amazon-dynamodb - AWS DynamoDB 命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73145303/

相关文章:

pagination - DynamoDB:在全局二级索引上使用“withExclusiveStartKey”进行分页

amazon-web-services - AWS Lambda 中的重试次数

amazon-web-services - 使用 AWS Athena 分析 DynamoDB 数据

Swift 4 - 结构静态变量不显示值

ios - AWS dynamodb 查询大多数时候崩溃

boto - 在 AWS DynamoDb 上查询 Range 键的最大值

amazon-web-services - DynamoDB 全局表

java - AWS SDK 错误 : A JNI error has occurred, ... java.lang.NoClassDefFoundError

php - AWS SDK for PHP DynamoDB PutItem 仅适用于非空变量

node.js - 使用 dynamoose.js 时如何避免将 aws config 设置为外部环境变量