2012-06-05 19 views
5

Tengo una pregunta sobre "mejores prácticas" en CouchDB (en realidad estoy usando TouchDB, un puerto CouchDB para iOS), cuando uso el framework CouchCocoa.Eliminar varios documentos en CouchDB

Necesito eliminar un grupo de documentos que recibo a través de una consulta. sé 3 maneras de hacer esto:

1) poner todos los documentos en un NSArray, a continuación, utilice [deleteDocuments CouchDatabase:]

2) filas de consulta foreach llamar al método de eliminación, como: para (CouchQueryRow * row in query.rows) [row.document DELETE];

3) crear una consulta que emiten _ID, propiedades _rev y añadir la propiedad _deleted, a continuación, utilizar la actualización masiva, como: [couchDatabase putChanges:]

¿Cuál es la mejor en cuanto al rendimiento? Hay una mejor manera de hacerlo?

Respuesta

1

En el nivel de la API HTTP, la forma más rápida de lograr esto es ejecutar una única solicitud por lotes que proporcione el _id y el _rev actual de todos los documentos que se eliminarán.

Su trabajo es asegurarse de que CouchCocoa realmente hace este — sé que CouchCocoa tratará de almacenar en caché el _rev de los documentos se lee, por lo que si va a eliminar los documentos que se acaban de leer, [CouchDatabase deleteDocuments:] debería ser suficiente, de lo contrario tendrá que [CouchDatabase getDocumentsWithIDs:] primero.

Si sus documentos son muy grandes, podría ser mejor obtener el _rev utilizando una vista en lugar de una obtención masiva. Esto obliga a utilizar [CouchDatabase putChanges:] para realizar la eliminación masiva. No sé dónde se encuentra el umbral de tamaño del documento, por lo que tendrá que comparar este.

Por supuesto, también necesita decidir qué sucede cuando ocurre un conflicto.

Cuestiones relacionadas