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

у приложение на Erlang / OTP и хочу использовать последовательные счетчики в системе записи версий.

Я впервые реализовал их с

mnesia:dirty_update_counter
но опыт его использования вытеснил эти жесткие требования:

Счетчики должны иметь следующие свойства:

быть строго последовательным - 1, затем 2, 3, 3 и т. д., и т. д. последовательность распределяется по распределенному набору систем, и если я поставлю вас как 3, а вы получите «5», мне нужно знать, что мы потеряли некоторые связи и должны синхронизироваться

сейф с распределенной базой данных

mnesia:dirty_update_counter
не соответствует ни одному из этих требований.

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

Ответы на вопрос(4)

Ваш ответ на вопрос