10

我正在学习 Couchbase,现在是 3.x 版

我的疑问是,我什么时候应该使用N1QL查询和View查询?

而且,它们之间是否存在性能差异?


注意:我有一个情况:

我的旅行应用程序包含两种文档类型存储桶:路线城市

Route doc 保存有关旅行路线的信息和作为​​其中一部分的 City id 数组,然后另一个 doc 保存城市的信息(每个城市都有自己的 doc)。例子:

//Bucket : "Traveling App"

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

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

当我查询某个旅行路线时,我应该做N1QL查询还是View查询?

因为我必须首先打开Route文档,所以获取城市数组而不是获取每个城市文档。

而且我认为这种架构会是最好的,因为有些路线可以有很少的城市,而另一些可以有很多城市。

4

3 回答 3

5

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 as city_name FROM travel_app r JOIN travel_app c ON KEYS r.cities WHERE r.name = "The Great Adventure";

无论一条路线有多少个城市,这些查询都将以相同的方式运行。

于 2015-02-16T11:29:05.843 回答
1

示例:如果您想找出一个城市的所有可能路线,您需要一个视图,该视图将始终在查询之前预先计算并准备好。

如果您通过索引执行相同的查询,则会导致更长的响应时间 更多文档可以在这里找到:http: //developer.couchbase.com/documentation/server/4.0/architecture/gsi-versus-views.html

于 2016-01-27T10:22:59.597 回答
0

N1QL 提供了获得正确路线所需的所有功能。N1QL 可以解除数组的嵌套,过滤你正在寻找的路由,然后加入这两种类型的文档。所以,N1QL 是要走的路。

于 2015-02-13T23:06:05.653 回答