Вопрос об обновлении на месте в Basho Riak

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

Я агрегирую по родителю, дочернему элементу, дочернему элементу и т. д., что делает запросы статистики быстрыми и безболезненными.

Я использую (в монго) ключ, состоящий из {Item_id, Hour}, и добавляю к нему (много)

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


person Lerchmo    schedule 20.05.2011    source источник


Ответы (2)


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

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

person alexpopescu    schedule 22.05.2011

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

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

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

person Jeremiah Peschka    schedule 29.07.2011