Генерация синтетических ключей разделов для таблицы DynamoDB - PullRequest
0 голосов
/ 26 сентября 2018

Я уверен, что это простой и распространенный вопрос в отношении DynamoDB, но документы Google или AWS мало чем помогли.

Мой вопрос прост:

Чтошаблон для генерации ключей секционирования?

В СУБД это довольно просто, например, с помощью столбцов идентификации (MSSQL) или последовательностей (Postgres).Однако, когда дело доходит до DynamoDB (я думаю, это применимо к любой базе данных NoSQL), неясно, как генерировать ключи секционирования - это должен быть GUID или последовательность, поддерживаемая в самой таблице?

Здесьпример схемы из Документы AWS - в качестве ключа раздела используются увеличивающиеся числа.Но я не могу придумать, как создать непересекающиеся последовательные числа на уровне приложения (в отличие от уровня базы данных, который обеспечивает атомарные транзакции, чего не делает DynamoDB)

1 Ответ

0 голосов
/ 26 сентября 2018

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

Генерирование последовательных уникальных идентификаторов на самом деле довольно сложно сделать в масштабе, ибольшинство реализаций СУБД на самом деле не так жестки, как можно было бы ожидать в масштабе (они, как правило, не гарантируют, что числа не будут пропущены, например, только то, что они будут уникальными и монотонно растущими).Если вы считаете, что вам нужно использовать инкрементный идентификатор в своей таблице, очень тщательно продумайте, почему и можно ли этого избежать.

Если вам действительно действительно нужен увеличивающийся цифровой ключ раздела,вам нужно иметь сервис в вашем приложении, которое генерирует его для вас.Вы можете реализовать это как отдельную таблицу DynamodB, содержащую только одну строку, с одним полем «значение счетчика», которое вы увеличиваете, используя ADD update выражение .Масштабирование этой реализации было бы проблематичным.

...