在使用CouchDB框架时,我有一个关于CouchCocoa的“最佳实践”问题(实际上我使用的是连接到iOS的CouchDB端口)。
我需要删除一堆通过查询获得的文档。我知道3种方法:
1)将所有文档放入NSArray,然后使用CouchDatabase deleteDocuments:
2) foreach查询行调用delete方法,如: for (CouchQueryRow* query.rows中的row ) row.document DELETE;
3)创建一个发出_id、_rev属性的查询,并添加_deleted属性,然后使用批量更新,如: couchDatabase putChanges:
更好的性能是什么?有更好的方法吗?
发布于 2012-06-21 21:10:23
在HTTP API级别,实现这一点的最快方法是运行单个批处理请求,该请求提供要删除的所有文档的_id和当前_rev。
您的工作是确保CouchCocoa真正做到这一点-我知道CouchCocoa会尝试缓存它读取的文档的_rev,所以如果您要删除刚刚读取的文档,[CouchDatabase deleteDocuments:]就足够了,否则您将不得不首先使用[CouchDatabase getDocumentsWithIDs:]。
如果您的文档是非常大的,那么使用视图而不是批量获取_rev可能会更好。这将强制您使用[CouchDatabase putChanges:]执行批量删除。我不知道文档大小的阈值在哪里,所以您必须对此进行基准测试。
当然,您还需要决定当冲突发生时会发生什么。
https://stackoverflow.com/questions/10898158
复制相似问题