У меня вопрос по поводу DynamoDB , а точнее, как смоделировать таблицу.
Описание проблемы:
Цель : пользователи могут сохранить ценуоповещения о товарах.
Например, : пользователь хочет сохранить оповещение о том, когда цена на товар х меньше целевой цены.
Что я хочуВ частности, сохраняются следующие значения: product, userId, targetPrice, operator .
Оператор может быть равен, меньше или больше (я бы проверил эти значения на шаге перед сохранением).
Пользователь может добавить несколько предупреждений для одного и того же продукта, если целевая цена и / или оператор будут отличатьсяЕсли все эти атрибуты одинаковы, то в БД не следует создавать дубликаты.
И предупреждения должны быть полностью разделены для каждого пользователя, конечно.
Мой основной " read"Дело в том, чтобы получить все оповещения о продукте.
Мое текущее решение - использовать продукт в качестве первичного ключа (когда я упоминаю продукт, я говорю об уникальном идентификаторе продукта).) и alertId в качестве ключа сортировки.
alertId является составным ключом всех атрибутов: product:userId:targetPrice:operator
.
Например, greatBook12:1234:34:lesser
.
. Вот пример кода в узле для сохранения предупреждения:
const params = {
TableName: TABLE_NAME,
Item: {
userId,
alertId: `${product}:${userId}:${targetPrice}:${operator}`,
product,
targetPrice,
operator
},
ReturnValues: 'ALL_OLD'
};
docClient.put(params) // ...
Мой вопрос:
Это неправильное использование ключа сортировки.Хотя он охватывает все мои требования (без дубликатов, чтение легко и должно быть относительно быстрым), мне было интересно, если нет лучшего способа сделать это.Может быть, с индексами или чем-то подобным?
Мне нравится плоская структура данных (только элементы в таблице), но, может быть, есть другой способ создания уникальных оповещений для разных targetPrices / операторов / продуктов / пользователей без создания дубликатов?
Итак, я предполагаю, что мой вопрос: есть ли лучший способ сделать это, выполняя требования, с которыми я работаю?
Заранее большое спасибо!