Couchbase - 我什么时候应该使用 N1QL 与 Views?

Couchbase - When should i use N1QL vs Views?

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

版本

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

而且,它们之间有性能差异吗?


注:我有一个情况:

一个 Bucket 有两个 文档类型 用于我的旅行应用程序:Route城市

一个 Route 文档保存了关于旅行路线的信息和作为​​其中一部分的 City ids 数组,然后是另一个文档持有城市的信息(每个城市都有自己的文档)。示例:

//Bucket : "Traveling App"

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

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

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

因为我必须先打开 Route 文档,获取 cities 数组 而不是获取每个 City文档

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

N1QL 提供了获得正确路线所需的所有功能。 N1QL 可以取消数组的嵌套,过滤您要查找的路由,然后加入这两种类型的文档。所以,N1QL 是必经之路。

N1QL 看起来很有希望用于您的数据。正如另一位发帖人所指出的那样,即使在开发者预览版中,它也值得探索。您可以 NEST traveling_app 自身以获取每条路线的所有城市文档 'nested':

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

要说出特定路线的城市名称,请使用路线的城市作为键将 traveling_app 与其自身连接起来:

SELECT c.name as city_name FROM traveling_app r JOIN traveling_app c ON KEYS r.cities WHERE r.name = "The Great Adventure";

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

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

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