1

我想在某处读到,当请求视图时,“地图”仅在自上次请求以来添加的文档中运行?这是如何确定的?我以为我看到了一些关于序列号的东西。这是你能做到的吗?它不是 _rev 字段尾随的 UUID 的一部分吗?

有什么方法可以强制“重新计算”整个视图(跨所有记录)?

4

1 回答 1

1

技术概述中有关视图索引的部分对此提供了很好的指导。

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

CouchDB 首先使用序列 id 检查整个数据库中是否有任何更改(只要数据库中的任何文档发生更改,就会更新该序列 ID)。如果发生了变化,它会查找这些文档并在它们上运行地图功能。

确实不需要重建/重新生成视图,因为它会在您修改文档时逐步刷新(请注意,在您使用它之前它不会更新视图)。用帽子说一种方法(我相信有更好的方法)是删除描述视图的设计文档并再次插入它,因为设计文档与普通文档(几乎)没有区别。

于 2009-12-03T18:40:03.713 回答