Многомерные ключи Couchbase

#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 но, похоже, это не самый быстрый способ доступа к данным.

  1. Какова наилучшая практика для доступа к многомерным ключевым данным с большим количеством значений ключей?
  2. Можно ли создавать большие операторы ‘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 для секунд, было бы беспорядочно умножать их друг на друга. Так что спасибо, я думал об этом, но все еще не хочу идти этим путем.