2017-04-25 42 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

またはSetのような複雑なデータ型に対しては、DynamoDBはインデックスの作成をサポートしていません。上記のモデルでは、rooms属性はListまたはSetと定義されている可能性があります。したがって、インデックスはrooms属性では定義できません。

後述するように、データモデルを変更することができた場合は、room属性にGSIを定義し、room属性に基づいてアカウントを取得するにはクエリAPIを使用することができます。

アカウント - パーティション・キー

部屋 - ソートキー - キーパーティションとして部屋の属性で

監査を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" 
    } 
] 
} 
関連する問題