5

在使用 CouchCocoa 框架时,我有一个关于 CouchDB 的“最佳实践”问题(实际上我正在使用 TouchDB 一个 CouchDB 端口到 iOS)。

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

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

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

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

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

4

1 回答 1

1

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

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

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

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

于 2012-06-21T13:10:23.423 回答