Почему G-счетчик не может выполнить операцию уменьшения?

#crdt

#crdt

Вопрос:

Я прочитал несколько статей о CRDT. И знал, что G-счетчик является реализацией CvRDT. Он может выполнять только операции увеличения. Однако каждый узел в алгоритме имеет свой собственный слот. Если он преобразуется в CmRDT и каждый узел передает свою работу вместо всего состояния, может ли G-счетчик выполнять уменьшение? Почему или почему нет?

Ответ №1:

Имя G-счетчика происходит от счетчика только для роста. Это определяется его семантикой, которая не является специфичной ни для CvRDT, ни для CmRDT. Таким образом, ничто не препятствует созданию счетчика на основе операций с операциями увеличения / уменьшения, дело в том, что это больше не будет просто G-счетчик 😉

Комментарии:

1. Если G-счетчик можно изменить для подсчета с помощью операций увеличения / уменьшения (возможно, с именем Some-Counter), зачем нам нужно двойное пространство (два G-счетчика), а не один, для построения PN-счетчика?

2. Семантика G-Counter определяет только операцию увеличения (отсюда и название счетчика только для увеличения), в то время как PN-Counter имеет обе операции увеличения / уменьшения (чтобы сделать возможным положительный-отрицательный подсчет). Вот и все, когда дело доходит до семантики. Теперь реализация: PN-счетчик на основе состояния обычно реализуется из двух G-счетчиков для поддержания свойства сходимости метода слияния. Однако ничто не требует, чтобы счетчик на основе операций использовал ту же реализацию. Фактически, большинство коммутативных счетчиков реализованы в виде простых значений. Семантика Cv- и CMRDT может быть одинаковой, но реализации отличаются