CouchDB - 参数和视图 - 幕后发生了什么,是否比临时视图更快/更快?

cll*_*pse 2 couchdb

考虑这三个文件......

[
    {
        _id: "...",
        _rev: "...",
        title: "Foo",
        body: "..."
    },
    {
        _id: "...",
        _rev: "...",
        title: "Bar",
        body: "..."
    },
    {
        _id: "...",
        _rev: "...",
        title: "Hello World!",
        body: "..."
    },
]
Run Code Online (Sandbox Code Playgroud)

而这种观点......

byTitle: {
    map: function (document)
    {
        emit(document.title, document);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我查询视图时,幕后发生了什么?...

GET /database/_design/posts/_view/byTitle?key="Foo"
Run Code Online (Sandbox Code Playgroud)


我最近问过一些关于观点的问题......关于我所说的"动态参数"的问题 ......基本上我想知道怎么做相同的SELECT ... WHERE field = parameter

所有答案都引导我使用临时视图,这些视图非常慢,不应该用于生产.所以我的第二个问题是...... 上面的标题查询方法,适合在生产中使用?或者我是否迫使CouchDB做出无法形容的恐怖,表现明智?...我基本上和使用临时视图一样吗?

Mar*_*cio 6

我想你误解了一些答案.您可以使用临时视图来测试各种map/reduce函数.当您对代码感到满意时,您应该将其放入设计文档中并使用它进行查询.

临时视图很慢,因为为每个查询构建和删除了索引.将它放入设计文档中,告诉CouchDB不要删除索引并保持更新(这是在查询时完成的).

所以

GET /database/_design/posts/_view/byTitle?key="Foo"
Run Code Online (Sandbox Code Playgroud)

是按标题查询的最快方法,因为它已编入索引.

作为旁注:你可以使用

byTitle: {
    map: function (document)
    {
        emit(document.title, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

查询include_docs=true以节省一些磁盘空间.

  • 在所有情况下,*都会创建一个索引并完全从每个文档构建*.所有视图查询都必须*对索引进行查询.但是,对于临时视图,在HTTP查询后将删除整个索引. (2认同)