0

У меня есть пользовательский объект с этими атрибутами.DynamoDB избегать дублирования не-ключей атрибутов

id (ключ), name и email

И я пытаюсь убедиться, что эти атрибуты являются уникальными в БД.

Как предотвратить операцию put/create/save от успеха, в случае какого-либо из неключевых атрибутов, email и name, уже существует в БД?

У меня есть таблица, tblUsers с одним ключевым атрибутом, являющимся id. У меня тогда есть два глобально вторичных индекса, каждый из которых также имеет один ключевой атрибут, являющийся email для первой индексной таблицы и name для второго.

Я использую инфраструктуру идентификации microsoft .net, которая сама проверяет наличие существующих пользователей с заданным именем или электронной почтой, прежде чем создавать пользователя.

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

ответ

2

dynamodb может заставить уникальность только для ключей таблицы хеш-диапазона (не для глобальных ключей вторичных индексов)

делать в вашем случае есть 2 варианта:

1) заставить его на уровне приложения - если ваш проблема заключается в безопасности, а затем использовать замки (замки) кэш

2) не использовать dynamodb (может быть, его не отвечать на ваши требования)

+0

Havent подумал о замках - я думаю, это мой лучший вариант - блокировка -> проверка на дублирование -> создание -> выпуск – Tsanas

+0

да, я использую его так же :) –

0

Я использую EHCache локально для проверки дубликатов. Добавление еще одной проверки, если ehcache пуст (по какой-то причине кеш был сброшен) .repopulate cache, выполнив запрос к dynamoDb.

Смежные вопросы