#indexing #couchbase
#индексирование #кушетка
Вопрос:
Я новичок в Couchbase и пытаюсь понять, подходит ли она моему домену. У меня есть следующие данные:
Birth City Name
1980 A John
1981 B Rick
1982 A Ase
1983 C Max
1984 C Bob
1980 A Rick
1983 D John
1982 A Bob
1985 C Bob
И не понимаю, как реализовать аналогично следующему SQL-запросу:
SELECT birth FROM tbl WHERE city in (A,C) and name (Bob, Rick)
чтобы получить следующие данные:
1984 C Bob
1980 A Rick
1982 A Bob
1985 C Bob
Одно большое отличие от режимов просмотра ‘startkey’ и ‘endkey’ заключается в том, что это не выбор диапазона, а два разных значения измерения.
В моем реальном сценарии мне нужно ввести 1-5000 идентификаторов в оператор «IN». Единственный способ, который я нашел, — это использовать индексацию и N1ql http://docs.couchbase.com/prebuilt/n1ql/n1ql-dp3/#create-index.html но, похоже, это не самый быстрый способ доступа к данным.
- Какова наилучшая практика для доступа к многомерным ключевым данным с большим количеством значений ключей?
- Можно ли создавать большие операторы ‘in’ в N1ql?
Комментарии:
1. Это похоже на запрос, для которого SQL идеально подошел бы… есть ли причина, по которой вам нужно использовать Couchbase для этого? Возможно, интеграция с ElasticSearch поможет обеспечить более гибкое выполнение запросов для ваших нужд.
Ответ №1:
Вы должны создать представление с помощью функции emit, включающей ключ с двумя значениями измерения и возвращающей значение, таким образом:
emit([doc.Name, doc.City], doc.Birth);
И вам нужно будет запросить его с помощью ключей параметров:
keys=[["Bob", "A"], ["Bob", "C"], ["Rick", "A"], ["Rick", "C"]]
Комментарии:
1. Это работает для небольших выборок, но если у меня будет около 100-200 идентификаторов для первого измерения и около 1000 для секунд, было бы беспорядочно умножать их друг на друга. Так что спасибо, я думал об этом, но все еще не хочу идти этим путем.