2012-06-05 67 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:]執行批量刪除。我不知道文檔大小閾值在哪裏,因此您必須對此文檔進行基準測試。

當然,您還需要決定發生衝突時會發生什麼。