Запретить переопределение ключей в хранилищах данных типа "ключ-значение" - PullRequest
0 голосов
/ 18 июня 2020

На этом рисунке ниже показана диаграмма последовательности для двух клиентов, сохраняющих значения в хранилище данных с ключом-значением:

enter image description here

Проблема, которую я пытаюсь решить решить, как предотвратить переопределение ключей. Приложения (Client_A и Client_B) предотвращают это, проверяя, существует ли ключ, перед сохранением. Теперь проблема в том, что если обоим клиентам удастся получить один и тот же результат «не существует», любой из двух клиентов сможет перезаписать значения.

Какую стратегию можно предпринять, чтобы предотвратить такое в клиентском проекте базы данных?

1 Ответ

0 голосов
/ 18 июня 2020

«Хранилище ключей и значений», как оно обычно определяется, вообще не хранит повторяющиеся ключи. Если два клиента записывают один и тот же ключ, то сохраняется только одно значение - то, из которого когда-либо клиент записывал «последнее».

Чтобы надежно обновлять значения согласованным способом (где новое значение зависит от на старом значении, связанном с ключом, или даже независимо от того, было ли старое значение или нет), ваше хранилище значений ключа должно поддерживать некоторые виды операций atomi c, кроме простых операций получения и установки.

Memcache, например, поддерживает операции сравнения и установки atomi c, которые устанавливают значение только в том случае, если оно не было установлено кем-либо еще с тех пор, как вы его прочитали. DynamoDB от Amazon поддерживает транзакции atomi c, счетчики atomi c и т. Д. c.

...