Couchbase - Когда я должен использовать N1QL против Views?

Я изучаю Couchbase, теперь на версии 3.x

Мое сомнение в том, когда я должен использовать запрос N1QL и запрос Просмотр?

И есть ли различия в производительности между ними?


Примечание. У меня есть ситуация:

A Bucket с двумя типами документов для моего приложения для путешествий: Маршрут и Город

A Маршрут doc содержит информацию о маршруте и массив Город, которые являются его частью, затем другой документ хранит информацию города (каждый город, имеющий его собственный документ). Пример:

//Bucket : "Traveling App"

{
  "type" : "route"
  "name" : "The Great Adventure",
  "cities" : ["234", "h4345", "h42da"]
}

{
  "type" : "city",
  "name" : "Little Town",
  "UID"  : "234"
}

Когда я запрашиваю определенный маршрут, должен ли я выполнить запрос N1QL или запрос Вид?

Поскольку мне нужно будет сначала открыть документ Маршрут, получить массив городов, чем получить каждый Город.

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

Ответ 1

N1QL выглядит многообещающим для ваших данных. Несмотря на то, что, как указывает другой плакат, в предварительном просмотре разработчика стоит изучить. Вы можете NEST travel_app с собой, чтобы получить все вложенные документы города с каждым маршрутом:

SELECT r.name, c FROM travel_app r NEST travel_app c ON KEYS r.cities;

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

SELECT c.name как city_name FROM travel_app r JOIN travel_app c ON KEYS r.cities WHERE r.name = "Великое приключение";

Эти запросы будут работать одинаково независимо от того, сколько городов имеет маршрут.

Ответ 2

N1QL предоставляет все функциональные возможности, необходимые для получения правильных маршрутов. N1QL может делать ненужные массивы, фильтруя для маршрута, который вы ищете, а затем присоединяйтесь к этим двум типам документов. Итак, N1QL - это путь.

Ответ 3

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

Если вы сделаете тот же запрос с помощью индексации, это приведет к увеличению времени ответа Дополнительную документацию можно найти здесь: http://developer.couchbase.com/documentation/server/4.0/architecture/gsi-versus-views.html