2012-06-05 12 views
5

Ho una domanda sulle "migliori pratiche" su CouchDB (in realtà sto utilizzando TouchDB una porta CouchDB su iOS), quando utilizzo il framework CouchCocoa.Elimina più documenti in CouchDB

Ho bisogno di cancellare un gruppo di documenti che ottengo tramite una query. So 3 modi per farlo:

1) mettere tutti i documenti in un NSArray, quindi utilizzare [DeleteDocuments CouchDatabase:]

2) file di query foreach chiamare il metodo delete, come: per (CouchQueryRow * row in query.rows) [row.document DELETE];

3) creare una query che emettono le _id, proprietà _rev e aggiungere la proprietà _deleted, quindi utilizzare l'aggiornamento di massa, come: [couchDatabase putChanges:]

Qual è la migliore performance-saggio? C'è un modo migliore per farlo?

risposta

1

A livello di API HTTP, il modo più veloce per ottenere ciò è eseguire una richiesta batch singola che fornisce lo _id e lo _rev corrente di tutti i documenti da rimuovere.

Il vostro compito è quello di fare in modo che CouchCocoa realmente fa questo — so che CouchCocoa cercherà di memorizzare nella cache la _rev di documenti che legge, quindi se si sta eliminando documenti che sono stati appena letto, [CouchDatabase deleteDocuments:] dovrebbe essere sufficiente, altrimenti si dovrà prima [CouchDatabase getDocumentsWithIDs:].

Se i documenti sono molto grandi, potrebbe essere meglio ottenere _rev utilizzando una vista anziché un recupero di massa. Questo ti obbliga a usare [CouchDatabase putChanges:] per eseguire l'eliminazione collettiva. Non so dove si trova la soglia della dimensione del documento, quindi dovrai confrontarla con questa.

Naturalmente, è anche necessario decidere cosa succede quando si verifica un conflitto.