Atomic Counters at Stateful.co

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Amazon DynamoDB - отличная облачная база данных NoSQL. Она дешевая, высоконадежная и достаточно мощная. Я использую ее во многих веб-системах.

Однако у нее есть одна особенность, которая отсутствует - автоинкрементные атрибуты.

Предположим, у вас есть таблица с списком сообщений:

Каждый раз, когда вы добавляете новый элемент в таблицу, необходимо установить новое значение id. И это должно делаться с учетом параллелизма. SQL-базы данных, такие как PostgreSQL, Oracle, MySQL и другие, поддерживают функции автоинкремента. При добавлении новой записи в таблицу, значение первичного ключа опускается, и сервер автоматически выбирает следующее. Если несколько запросов INSERT приходят одновременно, сервер гарантирует, что номера не будут дублироваться.

Однако DynamoDB не имеет такой функции. Вместо этого, в DynamoDB есть атомарные счетчики и условное обновление, которые являются очень похожими функциями. Тем не менее, они не совсем одинаковы.

В случае атомарного счетчика вы должны создать дополнительную таблицу и хранить в ней последнее значение id.

В случае условного обновления вы должны повторить несколько попыток в случае коллизий.

Для облегчения жизни в нескольких моих приложениях я создал простую веб-службу - stateful.co. Она предоставляет простую функцию атомарного счетчика через свой RESTful API.

Сначала вы создаете счетчик с уникальным именем. Затем вы устанавливаете его начальное значение (по умолчанию оно равно нулю). И все. Каждый раз, когда вам нужно получить новое значение для столбца id в таблице DynamoDB, вы отправляете HTTP-запрос на stateful.co, запрашивая увеличение вашего счетчика на один и возвращение его следующего значения.

stateful.co гарантирует, что возвращаемые значения никогда не будут дублироваться - независимо от того, сколько клиентов использует счетчик и с какой скоростью они запрашивают увеличение одновременно.

Более того, я разработал небольшой Java SDK для stateful.co. Вам нужно только добавить эту зависимость Maven java-sdk.jar в ваш проект.

И вы можете использовать счетчики stateful.co из Java-кода:

Вы можете ознакомиться с параметрами аутентификации для конструктора RtSttc на stateful.co.

Сервис абсолютно бесплатный.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-05 at 21:35

sixnines availability badge   GitHub stars