Вопрос о выполнении обновлений на месте в Башо Риак - PullRequest
2 голосов
/ 20 мая 2011

В настоящее время я использую Mongodb для записи статистики и рекламы. Я записываю необработанные показы в коллекцию журналов, и процессы «находят и модифицируют», чтобы извлечь журнал и объединить в предварительно вычисленную коллекцию, используя upsert (аналогично тому, как Rainbird работает с Twitter). http://techcrunch.com/2011/02/04/twitter-rainbird/

Я собираю данные о родителях, дочерних элементах, дочерних элементах и ​​т. Д., Что позволяет быстро и безболезненно запрашивать статистику.

Я использую (в монго) ключ, состоящий из {Item_id, Hour} и upsert to the (alot)

Мне было интересно, есть ли у Риака сильный способ решить ту же проблему, и как бы я ее реализовал.

Ответы [ 2 ]

1 голос
/ 22 мая 2011

Краткий ответ: я не думаю, что Riak поддерживает upsert -подобные операции.

Длинный ответ: Riak - это хранилище Key-Value, которое обрабатывает сохраненные значения как непрозрачные данные. Но в будущем Riak мог бы рассмотреть возможность добавления поддержки HTTP PATCH, которая могла бы позволить поддерживать операции, аналогичные upsert. Существует еще одна категория операций (сравнение и установка), которая также была бы интересной, но ее поддержка, безусловно, намного сложнее.

0 голосов
/ 30 июля 2011

То, как это работает с Riak, зависит от серверной части хранилища, которую вы используете для Riak.

Bitcask , текущий бэкэнд хранилища по умолчанию, использует логически структурированное хеш-дерево для механизма внутреннего хранилища. Когда вы пишете новую запись в Riak, совершенно новая копия ваших данных сохраняется на диске. В конце концов произойдет сжатие биткаска, и старые копии ваших данных будут удалены из файла биткаска.

Любой put в Riak - это эффект upsert - если данных не существует, будет вставлена ​​новая запись. В противном случае существующее значение будет обновлено путем истечения срока действия старого значения и присвоения последнему значению текущего значения.

...