2014-12-17 5 views
1

Я новичок в Riak, и я читал главу this из документов riak. Это показывает, что, добавляя информацию о структуре в ведра и ключи, можно преодолеть некоторые ограничения операций key/value.Riak: поиск по ключевому префиксу

Хотя статья гласит пример того, как такой ключ будет структурирована:

ключи данных датчика может быть предисловием sensor_ или temp_sensor1_ с последующим меткой времени (например, sensor1_2013-11-05T08: 15: 30 -05: 00)

О методах запроса данных с помощью префикса ключа (например, sensor1_) не упоминается ни один метод. Оглядываясь на stackoverflow, я нашел this вопрос. В нем упоминаются MapReduce и ключевая фильтрация как возможное решение. Но documentation на ключевых фильтрах заявляет, что они являются скоро устаревшей функцией. Я также проверил поиск Riak как возможный способ, но не смог найти способ запроса данных с помощью префикса.

Мой вопрос: что такое лучший способ поиска данных с помощью префикса? Я был бы очень признателен за пример.

ответ

2

Лучший способ поиска ключевого префикса - не делать этого, если вам не нужно, т. Е. Создавать вокруг этого шаблона поиска, если сможете. Основной способ сделать это - использовать детерминированные ключи, которые ваше приложение может легко вычислить. Тем не менее, если вы не можете избежать необходимости создания приложения для поиска в ключевых префиксах, вы можете сделать несколько вещей (все из которых имеют свои недостатки).

  1. Ключевые фильтры - http://docs.basho.com/riak/latest/dev/references/keyfilters/ - как вы уже отметили, они отмечены как устаревшие и не рекомендуемые на данный момент.
  2. MapReduce - http://docs.basho.com/riak/latest/dev/advanced/mapreduce/ - хороший вариант, если вы можете запросить пакеты, но не очень подходит для запросов в реальном времени. Вы можете кэшировать результаты запроса, если полезно предварительно вычислить запросы.
  3. Riak Search 2.0 (Solr) - http://docs.basho.com/riak/latest/dev/using/search/ - это, пожалуй, самый простой способ реализовать с точки зрения приложения и позволяет запросить ваши ключи, используя запрос по строкам: «curl» $ RIAK_HOST/search/sensor? Wt = json & q = _yz_rk: sensor1_ * "'. Использование поиска действительно связано с производительностью, связанной с запросами на основе прямых ключей, но вы можете кэшировать запросы.
  4. Моделирование данных - запрос по ключевым словам всегда будет обеспечивать наилучшую производительность, как указано выше. Один из вариантов состоит в том, чтобы воспользоваться преимуществами типов данных Riak (CRDT) и создать ведро, которое использует наборы. Вы можете создать набор для каждого датчика, который содержит список ключей, связанных с этим датчиком в первом ковше. Затем вы можете перебирать ключи в наборе и делать multi-get для возврата всех связанных записей.

Надеюсь, это даст вам некоторые идеи.

+1

Чтобы добавить еще один вариант к идеям моделирования данных Крейга: агрегирование ключей в периоды времени. Вместо того, чтобы записывать каждое значение датчика в свой собственный ключ, группируйте их в одну пару ключ/значение, содержащую все значения датчика в течение 1 минуты (или какой-либо размер работает для вас). Затем у вас есть четко определенные предсказуемые ключи, которые можно повторить без необходимости их сканирования. – Joe

+0

@Craig Спасибо за всесторонний ответ. Однако все еще интересно, почему, если этот шаблон поиска рекомендуется дизайнерами Riak, нет никакого простого способа его реализации? За исключением ключевого фильтра, который устарел. –

+0

@NikolayManolov Большой вопрос.Важно помнить, что механизм, который Riak использует для распределения данных вокруг кластера, равномерно затрудняет итерацию по клавишам. Вот почему Key List op не рекомендуется в производстве (это очень дорого). Если вы не можете спроектировать вокруг проблемы, я бы рекомендовал Solr, а затем MapReduce. – Craig

Смежные вопросы