У меня есть таблица customer
в DynamoDB с базовыми атрибутами, такими как name
, dob
, zipcode
, email
и т. Д. Я хочу добавить еще один атрибут, который будет увеличиваться со временем.Например, каждый раз, когда пользователь нажимает на товар (элемент), я хочу добавить его к записи, чтобы у меня был полный снимок профиля клиента в одном значении, индексированном customerId
.Итак, мой новый атрибут будет называться viewedItems
и будет представлять собой список из itemId
просмотров (вместе с отметкой времени).
Однако, учитывая ограничение размера 4 КБ для значения DynamoDB, он собираетсябыть превзойденным со временем, пока я продолжаю добавлять выбранные продукты в профиль клиента.
Как лучше всего определить мои объекты, чтобы выполнить следующее?
Доступ кполный профиль клиента по customerId
, включая просмотры.
Профиль доступа клиента, отфильтрованный по времени (как и все взаимодействия с последних N дней), в этом случае просматриваемые элементы должныбыть отфильтрованы по заданному диапазону времени.
Сканирование всей таблицы с использованием фильтра времени на viewedItems
.
Запрос должен бытьПроизводительность, поскольку профиль может быть получен во время запроса.
Возможность обновления отдельной записи клиента (например, с помощью пакетного задания, которое обновляет запись каждого клиента в случае необходимости).
в одну сторонуДля этого нужно создать другую таблицу (скажем, customer_viewed_items
) с хеш-ключом customerId
и ключом диапазона timestamp
со значением, равным itemId
, которое просматривал клиент.Но это похоже на усложняющуюся схему - не говоря уже о удвоенной стоимости доступа к элементу.Если мне нужно создать еще один атрибут на основе (скажем) «купленных» предметов, то мне нужно будет создать еще одну таблицу.Таким образом, решение, которое я имею в виду, мне не кажется хорошим.
Буду очень признателен, если вы поможете предложить лучшую схему / подход.