Amazon dynamodb DynamoDB索引和审核日志

Amazon dynamodb DynamoDB索引和审核日志,amazon-dynamodb,Amazon Dynamodb,我想在DynamoDB数据库中存储一个映射,这个映射在一个帐户和一个帐户也可以访问的东西列表之间。(这是一个独立的系统,不处理身份验证,因此我的文档仅包含此信息) 例如: Kasper, have access to Room301 and Room302. Peter, have access to Room301 and Room303. 范例 { account: "Kasper", rooms: ["Room301", "Room302"] } 但我还想存储已完成更改的审核日志。

我想在DynamoDB数据库中存储一个映射,这个映射在一个帐户和一个帐户也可以访问的东西列表之间。(这是一个独立的系统,不处理身份验证,因此我的文档仅包含此信息)

例如:

Kasper, have access to Room301 and Room302.
Peter, have access to Room301 and Room303.
范例

{
 account: "Kasper",
 rooms: ["Room301", "Room302"]
}
但我还想存储已完成更改的审核日志。 示例
“Admin123将Room302添加到Kasper”

我的想法是将其存储在同一个文档中,因为您总是只需要与“Kasper”相关的信息

例如:

{
 account: "Kasper",
 rooms: ["Room301", "Room302"]
 audit: [
  { 
    user: "Admin123",
    log: "Admin123 added Room302"
  }
  { 
    user: "Admin123",
    log: "Admin123 created account Kasper"
  }
 ]
}
但是,我们正在讨论将审核日志添加到文档中会使数据库碎片化并使查找速度变慢。这是正确的吗


偶尔我们需要搜索访问给定房间的帐户,例如访问301房间的所有帐户。DynamoDB是否有办法对此进行索引,或者这是否需要我使用RDS解决方案

DynamoDB不支持在复杂数据类型上创建索引,如
List
Set
。在上述模型中,
rooms
属性可以定义为
List
Set
。因此,不能在
房间
属性上定义索引

如果您可以如下所述更改数据模型,则可以在
room
属性上定义GSI,并使用Query API根据
room
属性获取账户

帐户分区密钥

房间-排序键-将房间属性定义为分区键的GSI

审核-非关键属性

{
 account: "Kasper",
 rooms: "Room301",
 audit: [
  { 
    user: "Admin123",
    log: "Admin123 added Room301"
  }
 ]
},
{
 account: "Kasper",
 rooms: "Room302",
 audit: [
  { 
    user: "Admin234",
    log: "Admin234 created account Kasper for room Room302"
  }
 ]
}