Riak: поиск по ключевому префиксу
Я новичок в Riak, и я читал эту главу из документов Раяка. Это показывает, что, добавляя информацию о структуре в сегменты и ключи, можно преодолеть некоторые ограничения операций ключ / значение.
Хотя в статье приведен пример того, как такой ключ будет структурирован:
Клавишам данных датчика может предшествовать датчик_ или temp_sensor1_ с последующей отметкой времени (например, sensor1_2013-11-05T08:15:30-05:00)
не упоминается способ запроса данных по ключевому префиксу (например, sensor1_). Осматривая stackru, я нашел этот вопрос. В нем MapReduce и ключ фильтрации упоминаются в качестве возможного решения. Но в документации по ключевым фильтрам говорится, что они являются устаревшей функцией. Я также проверил поиск Riak как возможный способ, но не смог найти способ запроса данных по ключевому префиксу.
Мой вопрос: каков наилучший способ поиска данных по ключевому префиксу? Я был бы очень признателен за пример.
1 ответ
Лучший способ поиска ключевого префикса состоит в том, чтобы не делать это, если вам это не нужно, то есть разрабатывать этот шаблон поиска, если можете. Основной способ сделать это - использовать детерминированные ключи, которые ваше приложение может легко вычислить. Тем не менее, если вы не можете избежать создания своего приложения, требующего поиска по ключевым префиксам, есть несколько вещей, которые вы можете сделать (все из которых имеют свои недостатки).
- Ключевые фильтры - http://docs.basho.com/riak/latest/dev/references/keyfilters/ - как вы уже отмечали, они помечены как устаревшие и не рекомендуются на данный момент.
- MapReduce - http://docs.basho.com/riak/latest/dev/advanced/mapreduce/ - хороший вариант, если вы можете делать запросы в пакетном режиме, но не очень подходит для запросов в реальном времени. Вы можете кэшировать результаты запроса, если предварительная обработка запросов полезна.
- 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_*"'. Использование поиска приводит к снижению производительности по запросам на основе прямых ключей, но вы можете кэшировать запросы.
- Моделирование данных - прямой запрос по ключу всегда обеспечивает наилучшую производительность, как указано выше. Один из вариантов - воспользоваться преимуществами типов данных Riak (CRDT) и создать корзину, в которой используются наборы. Вы можете создать набор для каждого датчика, который содержит список ключей, связанных с этим датчиком в первом сегменте. Затем вы можете перебирать ключи в наборе и выполнять множественное получение, чтобы вернуть все связанные записи.
Надеюсь, что это дает вам некоторые идеи.