По умолчанию LSI на DynamodB может иметь повторяющиеся значения.
Пример:
- Идентификатор компании - Ха sh Ключ
- Электронная почта пользователя - Ключ диапазона
- Плагин пользователя - ключ диапазона LSI
1 & 2 будет уникальным, поскольку его первичный ключ.
3 может иметь дубликаты, поскольку уникальность не гарантируется в LSI
Какую лучшую стратегию люди использовали для обеспечения уникальности LSI? Ниже приведены те, которые я рассмотрел.
Стратегии для использования: 1) Лучшая стратегия: использовать транзакции Dynamo, чтобы записать уникальные ключи в первичные ключи / ключи сортировки той же / другой таблицы и использовать условные выражения для проверки если ключ присутствует перед вставкой / обновлением. Например, в этом случае добавим ключ UserSlug # SomeValue к ключу диапазона. Условное выражение проверит, существует ли оно https://aws.amazon.com/blogs/database/simulating-amazon-dynamodb-unique-constraints-using-transactions/
2) Fail Strategy: проверьте, существует ли ключ перед вставкой. Легко потерпит неудачу, если операция выполнит одновременную вставку / обновление. В итоге получатся дубликаты
3) Простая стратегия: выполните обновление / вставку и подсчитайте ключи. Если его больше 1, удалите строку. Таким образом, если запущены одновременные операции, то оба не удастся.