2012-06-05 54 views
5

当使用CouchCocoa框架时,我对CouchDB(实际上我使用TouchDB是iOS的CouchDB端口)有一个“最佳实践”问题。删除CouchDB中的多个文档

我需要删除一堆通过查询获得的文档。 我知道3种方式来做到这一点:

1)把所有的文件放到一个NSArray,然后用[CouchDatabase deleteDocuments:]

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

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

什么是更好的性能明智?有更好的方法来做到这一点?

回答

1

在HTTP API级别,达到此目的的最快方法是运行单个批量请求,该请求提供要删除的所有文档的_id和当前_rev

你的任务是确保CouchCocoa实际上做这个—我知道CouchCocoa会尝试缓存中读取文件_rev,所以如果要删除刚才已经阅读文档,[CouchDatabase deleteDocuments:]应该够了,否则你首先必须要[CouchDatabase getDocumentsWithIDs:]

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

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