5

CouchCocoaフレームワークを使用する場合、CouchDBに関する「ベストプラクティス」の質問があります(実際には、iOSへのCouchDBポートであるTouchDBを使用しています)。

クエリで取得した一連のドキュメントを削除する必要があります。私はこれを行う3つの方法を知っています:

1) すべてのドキュメントを NSArray に入れ、[CouchDatabase deleteDocuments:] を使用します。

2) foreach クエリ行は、次のように削除メソッドを呼び出します。

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 に答える