2009-12-03 81 views
1

我认为读取某个地方时,请求查看时,“地图”仅在上次请求后添加的文档上运行?这是如何确定的?我以为我看到了关于序列号的一些事情。这是你可以得到的东西吗?它不是_rev字段的UUID尾部的一部分吗?CouchDB视图,地图,索引和序列

任何方式来强制整个视图(跨所有记录)的'重新计算'?

回答

1

关于Technical Overview中查看索引的部分是一个很好的指导。

视图构建器使用数据库序列ID来确定视图组是否完全与数据库保持同步。如果不是,则视图引擎将检查自上次刷新后更改的所有数据库文档(按照压缩顺序)。文件按磁盘文件中的顺序读取,减少了磁头寻找的频率和成本。
在检查文档时,如果它们存在,则将从视图索引中删除其先前的行值。如果文档被视图函数选中,则函数结果将作为新行插入到视图中。

CouchDB首先检查是否有任何在整个数据库中使用序列标识(每当数据库中的任何文档发生更改时都会更新)发生更改。如果事情发生了变化,它会查找这些文档并在其上运行地图功能。

实际上不应该有任何需要重建/重新生成视图,因为它会在您修改文档时递增刷新(请注意,它不会更新视图,直到您使用它为止)。用帽子说一种方法(我敢肯定还有更好的方法)是去除描述视图的设计文档并再次插入,因为设计文档与普通文档没有什么不同(几乎)。

+0

好的,这让我有更多的理解,那就是我想象的方式。 +1巧妙的把戏重建视图。 – BuddyJoe 2009-12-03 19:44:49

+1

我相信最近的CouchDB版本(例如.10.1)使用设计文档的视图函数来决定是否重建视图。因此,重新插入设计文档*可能不会刷新视图。当然,更新一个新的视图功能,但是。 – 2009-12-03 20:21:31

+0

@barry,这是非常有趣的,它是有道理的。你有什么链接到我可以阅读更多关于视图函数散列的地方吗? – 2009-12-04 06:48:18