2017-04-25 65 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" 
    } 
] 
}