2014-02-07 5 views
2

Я читал в CvRDTs и я знаю, что Riak уже added a few к Riak 2.G-счетчики в Riak: не лежат ли в базе данных одни и те же данные?

Мой вопрос: почему бы Riak реализовать gcounter когда он звучит как подстилающей vclock, связанного с каждым объектом записывает ту же информацию? Не будет ли результат gcounter с vclock, каждый из которых содержит одну и ту же важную информацию?

Мое единственное догадки прямо сейчас состояло в том, что Riak может собирать vclocks, обрезая информацию, которая на самом деле была бы важна для целей gcounter (т. Е. Количество приращений).

Я не могу прочитать Erlang особенно хорошо, поэтому, возможно, я ошибочно предположил, что Riak хранит vclocks с этими специальными типами данных. Однако этот вопрос по-прежнему относится к homegrown solutions, которые написаны поверх стандартного Riak (и, следовательно, наследуют vclocks с сохранением каждого объекта).

EDIT:

Я так написал следующую статью, чтобы помочь объяснить CvRDTs в более практическом ключе. Эта статья также затрагивает избыточность я выделил выше:

Conflict-free Replicated Data Types (CRDT) - A digestible explanation with less math.

ответ

4
  1. Riak чернослив версия векторов, не большая проблема причинности (ложь параллелизм, больше братьев и сестер, сейф), но бедствие для счетчиков.

  2. Riak CRDT поддержка - общий. Мы «скрываем» CRDT внутри обычного объекта riak.

  3. Поддержка RiD CRDT в первой волне, мы будем оптимизировать дальнейшие действия по мере выпуска новых релизов.

У нас есть большой список рассылки для таких вопросов, как, кстати. Stack Overflow использует его, но если вы хотите поговорить с авторами БД с открытым исходным кодом, почему бы не использовать их список? Поскольку Riak является открытым исходным кодом, вы можете отправить запрос на pull, мы хотели бы включить ваши идеи в базу кода.

+0

Спасибо за инсайдерскую информацию - я буду направлять будущие вопросы в список рассылки. Увлекательный продукт, следите за всеми полезными работами! :) –

2

Быстрого ответ: счетчиков Riak являются фактически PN-счетчиками, т.е. они позволяют оба приращения и декременты, поэтому не могут быть реализованы подобно vclock, поскольку они требуют отслеживания приращений и декретов по-разному.

Длинный ответ:

Этот вопрос предполагает, вы совершенно не поняли разницу между г-счетчиком и вектор тактовых импульсов (или версии вектора).

Векторные часы (vclock) - это система для отслеживания причинности одновременных обновлений части данных. Они представляют собой карту {actor => логических часов}. Актеры только увеличивают свои логические часы, когда данные связаны с изменениями, и стараются как можно меньше увеличивать его (так что не более одного раза за обновление). Два vclocks могут быть либо параллельными, либо доминировать над другим.

G-counter - это CvRDT с тем, что похоже на ту же структуру, что и vclock, но с важными отличиями. Они реализованы как карта {actor => counter}. Актеры могут увеличивать собственный счетчик столько, сколько они хотят. G-счетчик имеет концепцию «значение счетчика» и концепцию «слияния», так что, когда параллельные операции выполняются разными участниками, они могут определить, каково фактическое «значение счетчика».

Важно отметить, что g-счетчики не могут отслеживать причинность, а vclocks понятия не имеют, что такое их «значение счетчика».

Чтобы скомбинировать два в кодовой базе, это не только сбивало с толку, но и приводило к ошибкам.

Добавьте это к тому факту, что riak фактически реализует pn-счетчики. Разница в том, что g-счетчик может быть только увеличен, но pn-счетчики могут быть как увеличены, так и уменьшены. Pn-счетчики работают, будучи картой {actor => (счетчик приращений, количество декрементов)}, что, очевидно, имеет разную структуру для vclock.Вы можете только увеличивать оба этих значения, поэтому есть два, а не один.

+0

Спасибо за ответ :) Я вижу, что разница сводится к обрезке по умолчанию, что разрешено из-за описанного вами дизайна: пользователи не должны вызывать подсчет. AFAIK следующее неточно: «Важно отметить, что g-счетчики не могут отслеживать причинность». G-счетчик создает монотонную полурешетку с каждым обновлением, формирующим новый узел, как и vclock. Также: «Актеры только увеличивают свои логические часы, когда данные, связанные с изменениями» - когда связанные данные являются инкрементным g-счетчиком, vclock будет включен для каждого g-счетчика inc. Графики будут выравниваться, отсекая в сторону. –