Как вы находите размер ведра в риаке? (в МБ и без учета резервных копий) - PullRequest
3 голосов
/ 24 марта 2012

Я создаю приложение node.js, используя riak в качестве решения для хранения данных.Приложение позволит хранить некоторые данные от пользователей.Я хочу каким-то образом отследить, сколько места используется одним пользователем (1 пользователь -> x блоков).Я также хочу игнорировать распределенные копии (только 1 копия).

Мне не удалось найти что-либо, чтобы вычислить приблизительное использованное пространство.Использование скрипта node.js - это нормально, хотя я бы предпочел способ сделать это в базе данных (распределенным способом)

У кого-нибудь есть идея, как сделать это лучше?

Ответы [ 3 ]

3 голосов
/ 28 сентября 2012

Как предлагалось в предыдущих постах, есть 2 способа сделать это:

  1. Лучше всего использовать зацепки после фиксации, если вы реализуете это в работе карты / сокращения, вы можете использовать byte_size для содержимого объекта (см. Ниже)

  2. Реализация карты / сокращение работы, проверить https://github.com/whitenode/riak_mapreduce_utils и их map_datasize функция

крючок эрланга

update_bucket_size_hook(Object) ->
my_hooks_utils:update_bucket_size(riakc_obj:key(Object), 
  erlang:byte_size(riak_object:get_value(Object))).
0 голосов
/ 20 сентября 2012

Текущий общий размер данных в сегменте (или для произвольного набора записей) можно получить с помощью запроса mapreduce. Это обеспечит размер независимо от того, где хранятся записи и количество сохраненных копий. Поскольку я не смог найти функцию mapreduce, которая на самом деле возвращает размер данных, я создал ее. Это называется map_datasize и может быть найдено в моем репозитории GitHub .

Выполнение этого запроса mapreduce для содержимого целого сегмента, вероятно, будет довольно медленным и создаст некоторую нагрузку на систему (запускать задания mapreduce для целых сегментов не рекомендуется), но, возможно, его можно использовать, если требуется только размер определяется время от времени.

Если вам всегда требуется актуальная цифра, я думаю, что крюк после фиксации, как предложено в другом посте, может быть лучшим вариантом, хотя может быть немного сложно сохранить его точность, так как я не уверен будет ли у вас доступ к размеру заменяемой записи в обновлениях, чтобы рассчитать изменение размера.

0 голосов
/ 28 марта 2012

Я - новичок Riak, но на основании того, что я знаю, мой первый инстинкт должен был бы посмотреть на ловушку Post-Commit, где у вас есть доступ к объекту и свойствам - включая размер, я считаю.Затем вы можете настроить значения в отдельном сегменте, который отслеживает использование.Однако не уверен, что хуки до или после фиксации ограничены операциями над объектом, который вызвал хук.Возможно, в хуке post-commit мог бы быть добавлен вторичный индекс к рассматриваемому объекту с размером файла, к которому вы могли бы получить доступ через MapReduce в будущем.... это кажется интересной проблемой, поэтому мне интересно посмотреть, как вы ее решаете.Я хотел поиграть с крючками сам, но у меня не было шанса.

Commit Hooks

...