Когда вы используете 2P CRDT структуры данных (например, 2P-set), как вы освобождаете место?
2P-набор позволяет удалять элементы из набора, но не позволяет освободить пространство, занимаемое этими удаленными элементами. Фактически, удаление элемента занимает место, а не освобождает его. Какой алгоритм для освобождения места для 2P структур?
Я пытаюсь понять, для каких проблем я могу использовать структуры CRDT на практике. Без возможности освободить пространство структуры 2P CRDT, по-видимому, имеют очень ограниченное использование для задач реального мира.
1 ответ
Хотя я не могу говорить за 2P-Set - так как я до сих пор не нашел практического использования для этого. Однако обычно мы можем применять несколько методов:
- Сжатие метаданных, используемых CRDT: множество CRDT изначально были реализованы с очень простым дизайном, а затем оптимизированы для соответствия отраслевым стандартам. Примером такого может быть
OR-Set
переопределено поверх пунктирных векторных версий. В этой реализации вам не нужно хранить удаленные элементы в памяти: вместо этого мы можем отслеживать добавленные / удаленные элементы, используя точки, которые в конечном итоге могут быть сжаты в векторные часы. Здесь я описал эту проблему более подробно. - Сокращение может быть полезным, если некоторые реплики больше не нужны, например. потому что мы сократили количество узлов или эти узлы больше не доступны. В этом случае мы можем объединить полезную нагрузку с метаданными, как если бы она была создана другой репликой. Пример: дано
G-Counter
представлены с картой{A:1,B:2,C:1}
и мертвый узелB
(который больше не может увеличивать свое состояние), мы могли бы обрезать его путем слиянияB
вход в форму{A:3,C:1}
, следовательно, уменьшая его размер при сохранении правильного значения. Проблема в том, что алгоритм сокращения должен гарантировать, что все реплики должны сходиться в этом решении независимо.