2012-06-05 3 views
5

J'ai une question sur les bonnes pratiques sur CouchDB (en fait j'utilise TouchDB un port CouchDB pour iOS), en utilisant CouchCocoa framework.Supprimer plusieurs documents dans CouchDB

J'ai besoin de supprimer un tas de documents que je reçois via une requête. Je sais 3 façons de le faire:

1) mettre tous les documents dans un NSArray, puis utilisez [CouchDatabase deleteDocuments:]

2) lignes de requête foreach appel à la méthode de suppression, comme: pour (CouchQueryRow * ligne dans query.rows) [row.document DELETE];

3) créer une requête qui émette les _id, les propriétés _rev et ajoutez la propriété _deleted, puis utilisez la mise à jour en vrac, comme: [couchDatabase putChanges:]

Quelle est la meilleure performance sage? Il y a une meilleure façon de le faire?

Répondre

1

Au niveau de l'API HTTP, le meilleur moyen d'y parvenir est d'exécuter une requête de lot unique qui fournit tous les documents de l'_id et le courant _rev à supprimer.

Votre travail consiste à faire en sorte que CouchCocoa ne fait ce — je sais que CouchCocoa va essayer de mettre en cache la _rev des documents qu'il lit, donc si vous supprimez des documents qui viennent d'être lus, [CouchDatabase deleteDocuments:] devrait être suffisant, sinon vous devra d'abord [CouchDatabase getDocumentsWithIDs:].

Si vos documents sont très volumineux, il peut être préférable d'obtenir le _rev en utilisant une vue au lieu d'un chargement en bloc. Cela vous oblige à utiliser [CouchDatabase putChanges:] pour effectuer la suppression en masse. Je ne sais pas où se situe le seuil de taille du document, vous devrez donc comparer celui-ci.

Bien sûr, vous devez également décider ce qui se passe en cas de conflit.

Questions connexes