Как правильно структурировать Dynamodb, чтобы иметь вложенные или связанные свойства? - PullRequest
0 голосов
/ 31 мая 2019

Я начинаю работу с Dynamodb и пытаюсь выяснить, как правильно структурировать следующее:

У меня есть пользователь, и у каждого пользователя может быть несколько изображений (ссылки s3 и некоторые метаданные).), без ограничения по сумме.

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

В Mongodb я бы создал массив с именем pictures, содержащий объекты с данными каждого изображения.Это также правильный подход в Dynamodb?

1 Ответ

0 голосов
/ 31 мая 2019

Вот как вы можете сделать с DynamodB

| pk    |   sk     |
| user1 |  metadata | age:24 | name: Jon| ...
| user1 | picture#1234#id1 | url:abc.com/xyz.jpeg | ... some other metadata
| user1 | picture#2456#id2 | url:abc.com/xyz.jpeg | ... some other metadata
| user1 | picture#4567#id3 | url:abc.com/xyz.jpeg | ... some other metadata

, где 1234, 2456 могут представлять время загрузки изображения. Теперь вы можете делать запросы, как

  1. достань мне все фотографии в хронологическом порядке.

    Select * from table where pk=user1 and sk starts with picture#

  2. доставь мне все фотографии, загруженные ч / б или после определенной даты.

    Select * from table where pk=user1 and sk starts with picture# and sk>picture#1234

  3. Получить данные о пользователе

    Select from table where pk=user1 and sk=metadata

Это сделает несколько вещей

  1. Нет условий гонки / блокировки при загрузке картинки

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

...