Couchbase - 我应该何时使用N1QL vs Views?

时间:2015-02-13 13:23:33

标签: couchbase couchbase-view n1ql

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

我的疑问是,我应该何时使用 N1QL 查询与查看查询?

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


注意:我有一个情况:

Bucket ,我的旅行应用程序有两个文档类型路线城市

路线 doc包含有关旅行路线的信息以及作为其中一部分的城市 ID的数组,然后另一个doc保存城市的信息(每个城市都有它自己的doc)。例如:

//Bucket : "Traveling App"

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

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

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

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

我认为这种架构最好,因为有些路线的城市很少,而其他城市可能有很多城市。

3 个答案:

答案 0 :(得分:6)

N1QL看起来很有希望获得您的数据。正如另一张海报所指出的那样,在开发者预览版中,它是值得探索的。您可以使用NEST travel_app来获取所有城市文档与每条路线“嵌套”:

  

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

要说出特定路线的城市名称,请使用路线的城市作为关键点加入travel_app:

  

SELECT c.name as city_name FROM traveling_app r JOIN traveling_app c ON   KEYS r.cities WHERE r.name =“大冒险”;

无论路线有多少个城市,这些查询的运作方式都相同。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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