DynamoDB Массив схемы строк - PullRequest
1 голос
/ 28 мая 2019

Мне нужна помощь в том, как я могу получить схему, приведенную ниже, в моей базе данных DynamodB.

Пример моего JSON

var users = [{
    userId: 123,
    userName: "John Smith",
    additionalInfomation: [
      ["favoriteColor", "blue"], 
      ["hobbies", "ping-pong"]
    ]
}]

Это то, чего я до сих пор достигалсхемы userId и userName.У меня проблемы с настройкой additionalInfomation part.

  const params = {
    AttributeDefinitions: [
      {
        AttributeName: 'userId',
        AttributeType: 'N'
      },
      {
        AttributeName: 'userName',
        AttributeType: 'S'
      },
      {
        AttributeName: 'additionalInformation',
        AttributeType: <NEED HELP HERE> // <-------------------- ?????
      }
    ],
    KeySchema: [
      {
        AttributeName: 'userId',
        KeyType: 'HASH'
      },
      {
        AttributeName: 'userName',
        KeyType: 'RANGE'
      },
      {
        AttributeName: 'additionalInformation',
        KeyType: <NEED HELP HERE> // <-------------------- ?????
      }
    ],
    ProvisionedThroughput: {
      ReadCapacityUnits: 1,
      WriteCapacityUnits: 1
    },
    TableName: 'USERS',
    StreamSpecification: {
      StreamEnabled: false
    }
  };
  // Call DynamoDB to create the table
  ddb.createTable(params, function(err, data) {
    if (err) {
      console.log('Error', err);
    } else {
      console.log('Table Created', data);
    }
  });

Нужна помощь в настройке схемы additionalInformation.Пожалуйста, извините за мое невежество, если это не правильный подход.Все еще изучать DynamoDB и документацию по aws не совсем полезно для новичка.

1 Ответ

1 голос
/ 28 мая 2019

Для этого варианта использования я рекомендую вам выбрать userId или userName в качестве ключа HASH (он же ключ раздела) для вашей таблицы, предполагая, что любой из этих атрибутов будет однозначно идентифицировать пользователя. RANGE ключ (он же ключ сортировки) полезен, когда у вас есть несколько элементов, связанных с одним ключом раздела, c.f. исполнители и названия песен в параграфе Primary Key руководства пользователя DynamoDB. Следовательно, это означает, что вам нужно указать только один атрибут в AttributeDefinitions и KeySchema.

Кроме того, я рекомендую вам опустить additionalInformation в своей схеме, исходя из предположения, что вы не будете использовать эту информацию в качестве ключа раздела или ключа сортировки.

Вместо этого вы можете добавить их как два отдельных атрибута для отдельных элементов при вызове putItem () или updateItem (или соответствующих put () и update () функционирует, если вы используете DynamoDB DocumentClient ).

const params = {
  Item: {
   "userId": {
     N: "123"
    }, 
   "userName": {
     S: "dummy"
    }, 
   "favoriteColor": {
     S: "blue"
    },
   "hobbies": {
     SS: ["ping-pong", "another hobby"]
    }
  }, 
  TableName: "USERS"
 };
 const putItemPromise = dynamodb.putItem(params).promise()

Обратите внимание, что в приведенном выше примере я указал favoriteColor как S, то есть одну строку, но hobbies как SS означает, что это массив строк. Это может или не может быть тем, что вы хотите, но так как имя атрибута - «хобби» (а не «хобби»), я решил, что было бы целесообразно разрешить более одного.

...