2015-07-08 6 views
0

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

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

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

Но такое решение будет работать только, если я знаю (на основе ключа), на котором хранится конкретная запись узла. Есть ли способ сделать это?

ответ

1

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

Это будет означать, что ваши запросы будут эффективно использовать r = 1, поэтому, если когда-либо произошел сбой, вы получите некоторые ложные не найденные результаты.