Couchbase 中的视图是什么

what is view in couchbase

我试图了解 couchbase 视图的确切用途,我已经阅读了文档中的一些资料,但 'view' 概念并不能很好地解决我的问题。 Couchbase 中的视图是否类似于 RDBMS 中的视图?

https://docs.couchbase.com/server/6.0/learn/views/views-basics.html

A view performs the following on the Couchbase unstructured (or semi-structured) data:

Extract specific fields and information from the data files.

Produce a view index of the selected information.

viewindex 如何在这里工作,似乎有单独的 index for view。那么如果文档更新,两个索引都会更新吗?

https://docs.couchbase.com/server/6.0/learn/views/views-store-data.html

In addition, the indexing of data is also affected by the view system and the settings used when the view is accessed.

有帮助post: Views in Couchbase

您可以将 Couchbase Map/Reduce 视图视为类似于物化视图,是的。除了您使用 JavaScript 函数(映射函数和可选的 reduce 函数)创建它们之外。

例如:

function(doc, meta)
{
  emit(doc.name, [doc.city]);
}

这将查看每个文档,并保存每个文档的视图,其中仅包含城市,并且具有名称键。

例如,假设您有两个文档;

[
key 1 {
   "name" : "matt",
   "city" : "new york",
   "salary" : "100",
   "bio" : "lorem ipsum dolor ... "
},
key 2 {
   "name" : "emma",
   "city" : "columbus",
   "salary" : "120",
   "bio" : "foo bar baz ... "
}
]

然后,当您 'query' 此视图时,您将获得:

[
key "matt" {
   "city" : "new york"
},
key "emma" {
   "city" : "columbus"
}
]

这是一张非常简单的地图。您还可以使用像 _count、_sum、_stats 或您自己自定义的 reduce 函数。

此视图的结果与每个节点上的数据一起存储(并在数据更新时更新)。但是,您可能应该远离 Couchbase 视图,因为:

  • 视图与每个节点上的数据一起存储。所以在读取的时候,必须从每个节点拉取数据,合并,再拉取。 “Scatter/gather”
  • JavaScript map/reduce 并未提供您可能需要的所有查询功能。例如,你不能做 'joins' 这样的事情。
  • Couchbase 有 SQL++ (aka N1QL),它更简洁、声明性更强,并使用全局索引(而不是 scatter/gather),因此它可能会更快并减少重新平衡等过程中的压力
  • 自 Couchbase Server 7.0 起已弃用(并且在 Couchbase Capella 中根本不可用)