PouchDB二级索引存储维护疑问:Mango与Map/reduce方式对比
解答
你的理解不完全正确,两种方式创建的索引都会被持久化存储在数据库中,并且会随数据库变更自动维护:
Mango索引(
createIndex()):
调用createIndex()时,PouchDB会先检查指定的设计文档(通过ddoc参数)是否已存在对应索引。只有当索引不存在时才会创建,不会每次调用都重新生成。索引创建完成后,会以特殊设计文档的形式存储,后续数据库新增、修改或删除文档时,索引会自动更新。你示例中使用的use_index参数,正是用来指定复用已创建的索引,而非临时生成。Map/Reduce索引:
你的猜测是对的,通过手动添加_design文档创建的Map/Reduce索引会被持久化存储。当数据库内容发生变更时,PouchDB/CouchDB会自动更新对应的视图索引,后续调用db.query()时直接使用已维护好的索引,无需重新构建。
总结:两种方式创建的索引都会被持久化存储并自动维护,不存在“每次调用重新创建”的情况。Mango索引是PouchDB提供的更易用的高层API,底层其实也是基于设计文档实现的,和Map/Reduce索引共享相同的存储与维护机制。
内容的提问来源于stack exchange,提问作者Pontios
相关产品推荐
相关产品推荐

