2014-10-05 93 views
0

我正在研究将使用DynamoDB的项目,我对如何更新具有包含项目数组的属性的文档有点困惑。DynamoDB更新HasMany关系

我希望用这个NPM模块https://www.npmjs.org/package/dynamodb-model

例架构

# User Schema 
{ 
    "identifier": "String", 
    "email": "String", 
    "referral_token": "String", 
    "campaign_id": "Number", 
    "first_name": "String" 
    "last_name": "String", 
    "gender": "String", 
    "birth_date": "String", 
    "username": "String", 
    "mobile_number": "String", 
    "postal_code_text": "String", 
    "classification": "String", 
    "delivery_email": "Boolean", 
    "delivery_sms": "Boolean", 
    "authentications": [{Authentication Schema}] 
} 

# Authentication Schema 
{ 
    "provider": "String", 
    "uid": "String", 
    "oauth_token": "String", 
    "oauth_token_secret": "String", 
    "nickname": "String" 
} 
+1

字符串数组是否不够?另外,请详细说明您打算如何使用“身份验证”属性。如果您只是打算读取它并覆盖之前的值,则不需要做任何特别的事情。 – kurtzbot 2014-10-07 21:24:30

回答

0

由于kurtzbot指出的那样,你可以将它们存储为一个数组。更好的是,您可以使用新的JSON文档模型。它会为你处理数组序列化/反序列化。 http://aws.amazon.com/blogs/aws/dynamodb-update-json-and-more/

在另一方面,如果一个用户可以有“认证”了很多,我建议设计方案这样来避免热点问题:

User table: just like the tables you already have, without authentications fields 

Auth table: same table you already have 

user-auth table: User.identifier as hashkey, Authentication.uid as range key. 

有了这个模式,插入新用户的身份验证不需要读取任何现有的用户身份验证对。