我正在学习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 查询还是查看查询?
因为我必须首先打开路线文档,获取城市数组而不是获取每个城市文档。
我认为这种架构最好,因为有些路线的城市很少,而其他城市可能有很多城市。
答案 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