Когда вы используете 2P CRDT структуры данных (например, 2P-set), как вы освобождаете место? - PullRequest
0 голосов
/ 19 декабря 2018

2P-набор позволяет удалить элементы из набора, но не позволяет освободить пространство, занимаемое этими удаленными элементами.Фактически, удаление элемента занимает место, а не освобождает его.Каков алгоритм для освобождения места для структур 2P?

Я пытаюсь понять, для каких проблем я могу использовать структуры CRDT на практике.Без возможности освободить пространство структуры 2P CRDT, по-видимому, имеют весьма ограниченное использование для задач реального мира.

1 Ответ

0 голосов
/ 27 декабря 2018

Хотя я не могу говорить за 2P-Set - так как я до сих пор не нашел практического варианта его использования.Однако обычно мы можем применять несколько методов:

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