在CouchDB中删除多个文档

il *_*tto 5 couchdb ios couchcocoa

当使用CouchCocoa框架时,我在CouchDB上遇到了一个"最佳实践"问题(实际上我正在使用TouchDB作为iOS的CouchDB端口).

我需要删除一堆通过查询获得的文档.我知道3种方法:

1)将所有文档放入NSArray,然后使用[CouchDatabase deleteDocuments:]

2)foreach查询行调用delete方法,如:for(CouchQueryRow*row in query.rows)[row.document DELETE];

3)创建一个发出_id,_rev属性并添加_deleted属性的查询,然后使用批量更新,如:[couchDatabase putChanges:]

性能更好的是什么?有更好的方法吗?

Vic*_*let 1

在 HTTP API 级别,实现此目的最快的方法是运行单个批处理请求,该请求提供要删除的所有文档的_id当前状态。_rev

你的工作是确保 CouchCocoa 确实做到了这一点——我知道 CouchCocoa 会尝试缓存_rev它读取的文档,所以如果你要删除刚刚读取的文档,[CouchDatabase deleteDocuments:]应该足够了,否则你必须[CouchDatabase getDocumentsWithIDs:]先这样做。

如果您的文档非常大_rev,那么使用视图而不是批量获取可能会更好。这迫使您使用[CouchDatabase putChanges:]执行批量删除。我不知道文档大小阈值在哪里,因此您必须对此进行基准测试。

当然,您还需要决定发生冲突时会发生什么。