Возможно, самый простой ответ - это то, что вы ищете, просто получив блокировку записи (для реплицированной синхронизации) и сделав транзакционную функцию, которая получает текущее значение счетчика, увеличивает его и сохраняет обратно в БД. Конечно, вы будете увеличивать накладные расходы по мере масштабирования системы, но я бы порекомендовал написать сервер, который сделает это за вас, и запустить его на подмножестве узлов, чтобы конфликт блокировки не был напрямую связан с размером кластера.
у приложение на Erlang / OTP и хочу использовать последовательные счетчики в системе записи версий.
Я впервые реализовал их с
mnesia:dirty_update_counterно опыт его использования вытеснил эти жесткие требования:
Счетчики должны иметь следующие свойства:
быть строго последовательным - 1, затем 2, 3, 3 и т. д., и т. д. последовательность распределяется по распределенному набору систем, и если я поставлю вас как 3, а вы получите «5», мне нужно знать, что мы потеряли некоторые связи и должны синхронизироваться
сейф с распределенной базой данных
mnesia:dirty_update_counterне соответствует ни одному из этих требований.
Как я могу реализовать последовательный счетчик базы данных?