Иметь несколько записей для одного пользователя в DynamoDB - PullRequest
0 голосов
/ 25 июня 2018

Я хочу иметь несколько записей для uname (одного и того же пользователя) в DynamoDB, но запись обновляется, когда я выполняю запрос POST.Я хочу несколько записей для одного и того же пользователя вместо одной.То есть: после метода POST со всеми атрибутами записи обновляются вместо создания новой записи.

По запросу GET: 'url / uname' дает только одну запись.

Я хочу получить несколько записей, как мне этого добиться?

service: Test1

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

provider:
  name: aws
  runtime: python3.6
  environment:
    DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"

functions:
  create:
    handler: create.create
    events:
      - http:
          path: form
          method: post
          cors: true

  list:
    handler: list.list
    events:
      - http:
          path: form
          method: get
          cors: true

  get:
    handler: get.get
    events:
      - http:
          path: form/{uname}
          method: get
          cors: true

resources:
  Resources:
    TodosDynamoDbTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          -
            AttributeName: uname
            AttributeType: S
        KeySchema:
          -
            AttributeName: uname
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 10
          WriteCapacityUnits: 10
        TableName: ${self:provider.environment.DYNAMODB_TABLE}

1 Ответ

0 голосов
/ 26 июня 2018

Вам необходим GSI: глобальный вторичный индекс .В GSI нет ограничений на один элемент на ключ раздела.Вот что вы можете сделать:

Измените основную таблицу так, чтобы первичный ключ имел уникальное значение для каждого запроса пользователя.Каждый раз, когда вам нужно сохранить запрос пользователя, вы генерируете новый первичный ключ, как этот (просто пример): randomInteger[1:10000] + timestamp + userID.Этого должно быть достаточно, чтобы два запроса не имели один и тот же ключ раздела.

С каждым из этих элементов также сохраняйте userID как отдельный атрибут (может быть вашим ключом сортировки или обычным атрибутом).Конечно, также сохраните все другие необходимые вам атрибуты.

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

...