AWS 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
  • 不同元素用句点(.(分隔
  • 所有名称都用破折号(kebab大小写(和小写分隔
  • 表格/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作为分区密钥和排序密钥
  • 不要将表名放入代码中。使用ParameterStore。例如,如果您进行表恢复,它将是一个新的表名称,如果您想将流量发送到新名称,则不想更改代码
  • 因此,不要太拘泥于任何特定的表名。永远不要试图让代码预测表名。只有他们始终如一地帮助人类
  • 不要在表名中添加区域。当您切换到全局表时,它们都保持相同的名称。尴尬
  • GSI可以称为GSI1、GSI2等。GSI密钥是GSI1PK和GSI1SK等
  • 如果以后想跟踪每张表的成本,请在表上标记它们的名称
  • 简短而有意义的属性名称很好,因为它可以减少存储,并且如果你在4kb或1kb线附近,可以减少RCU/WCU
  • 对开发、暂存和生产使用差异帐户。如果你也想把名字放进表格中,以帮助你发现";天哪,我正在生产";没关系
  • 如果有很多属性作为项目负载,而这些属性不用于GSI或筛选,并且总是一起返回,那么可以考虑将它们存储为字符串或二进制文件,以便在客户端进行解析。你甚至可以压缩它们。由于它跳过了数据封送处理,因此效率更高,延迟更低

最新更新