2017-04-25 91 views
0

我想将映射存储在DynamoDB数据库中,此映射位于帐户和帐户可以访问的事物列表之间。 (这是一个独立的系统,不处理身份验证,所以我的文件将只包含此信息)DynamoDB索引和审计日志

例子:

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

{ 
account: "Kasper", 
rooms: ["Room301", "Room302"] 
} 

,但我也想存储的所做更改的审计日志。 示例"Admin123 added Room302 to Kasper"

我的想法是将其存储在同一文档中,因为您始终只希望将此信息与“Kasper”连接起来。

一个例子:

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

但是我们正在讨论将审计日志文件将数据库碎片化,使查找速度较慢。它是否正确?

偶尔我们需要搜索可访问指定房间的帐户,例如所有帐户都可以访问Room301。 DynamoDB可以索引这种方式吗?或者这需要我使用RDS解决方案吗?

回答

1

DynamoDB不支持在复杂数据类型(如ListSet)上创建索引。在上述模型中,rooms属性可能已被定义为ListSet。所以,索引不能在rooms属性上定义。

如果你可以改变如下所述的数据模型,你可以room属性定义GSI和使用查询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" 
    } 
] 
}