2016-10-31 2 views
0

У меня есть таблица dynamodb, где ключ раздела равномерно распределен. Таблица хранит данные о пользовательской информации, такой как (имя, адрес электронной почты, страна и карточки портала, которые пользователь держит, например, пользователь1 имеет карты1, карточки2, карточки3 (макс. 10 категорий карт) с деталями карт1 как (золотая карточка, купленная дата-гггг- мм-дд) пользователь может иметь .A запросов на столе будет по идентификатору пользователя.DynamoDb map vs string атрибут read/update

  1. мне нужно получить, сколько карт с именем и типа user1 трюмом,
  2. нужно получить страна_рождение user1
  3. Need Чтобы получить, пользователь1 держит любую карточку card1 категории золота типа hold, которые были приобретены в текущем году и в какой стране user1.

Для достижения этой цели я могу создать мою схему 2-мя способами: -

  1. Каждый элемент имеет атрибуты (кроме ключа идентификатор раздела) как (Country-строка, имя строки, адрес электронной строки, карты карты { "card1": { "purchasedate": "гггг-мм-дд", "тип": "золотой"}, "Card2": {{ "purchasedate": "гггг-мм-дд", "тип": "платина "}}}
  2. Сделайте идентификатор пользователя в качестве первичного ключа и категории карты в качестве ключа сортировки и сохраните информацию о пользователе в элементе с ключом как userid_all и информацию о карте в элементе с помощью введите ключ userid_card1 и атрибуты типа string в качестве купленного и введите тип. говорят userid1_all: страна: нам, электронная почта: [email protected] userid_card1: purchasedate: гггг-мм-дд, тип: золото

Какой подход лучше?

  1. Чтение данных из атрибута карты лучше или из атрибута строки.
  2. Обновление атрибутов с типом карты (например, userid1 для типа card1 с золотом до платины) лучше или строковый.

Благодаря

ответ

0

Хотя DynamoDB поддерживает типы данных документов (Карта, Список и т.д.), то API запрос не очень надежен. В вашем проектном подходе 1, если вы преобразуете данные в элемент DynamoDB, на самом деле вы получите сложный объект (т. Е. Значение card1 - это объект с двумя атрибутами, приобретенный и тип) для атрибута карты. В третьем шаблоне запроса есть требование отфильтровать путем покупки и указать, какой API-интерфейс DynamoDB не поддерживается, поскольку он находится внутри другого объекта типа данных MAP, а не некоторого скалярного атрибута внутри MAP.

Простой объект МАП: -

{"purchasedate":"yyyy-mm-dd","type":"gold"} 

комплекс объекта МАП: -

{"card1":{"purchasedate":"yyyy-mm-dd","type":"gold"},"card2":{"purchasedate":"yyyy-mm-dd","type":"platinum"}} 

Таким образом, подход к проектированию 2 лучше. До тех пор, пока у вас есть скалярные атрибуты (например, String, Number, Boolean), вы можете запросить таблицу различными комбинациями атрибутов в FilterExpression.

+0

так что если я пойду с подходом 2, мне нужно будет сделать 2 звонка на dynamodb для третьего шаблона запроса - получение информации о стране и карте1? и для шаблона запроса1 несколько элементов будут извлекаться с одним и тем же ключом пользователя user1 - будет ли это дороже, чем 1 элемент, возвращенный в подходе1? – user1846749