Pregunta

Me pregunto lo que realmente se almacena en una base de datos CouchDB árbol B? El CouchDB: La guía definitiva dice que una base de datos de árbol B se utiliza para operaciones de sólo anexo y que una base de datos se almacena en un único árbol B (además de por visión árboles B).

Así que supongo que los elementos de datos que se anexan al archivo de base de datos son las revisiones de los documentos, no toda la documentación:

            +---------|### ...  
            |           |
   +------|###|------+     ... ---+
   |        |        |            |
+------+ +------+ +------+     +------+
| doc1 | | doc2 | | doc1 | ... | doc1 |
| rev1 | | rev1 | | rev2 |     | rev7 |
+------+ +------+ +------+     +------+

¿Es cierto?

Si es cierto, entonces ¿cómo la revisión actual de un documento se determina sobre la base de un árbol B tal?

¿No significa, que CouchDB necesita una base de datos independiente "vista" para la indexación la versión actual de documentos para preservar O (log n) el acceso? ¿No conducir a condiciones de carrera, mientras que la construcción de un índice de este tipo? (Por lo que yo sé, CouchDB no utiliza bloqueos de escritura).

¿Fue útil?

Solución

El archivo de base de datos en el disco es sólo de adición; sin embargo, el árbol B se modifica conceptualmente en el lugar. Cuando se actualiza un documento,

  1. Su nodo hoja está escrito (con append en el fichero de base de datos)
  2. Su nodo padre es re-escrito para hacer referencia a la nueva hoja (con append por supuesto)
  3. Repita el paso 2 hasta que se actualice el nodo raíz

Cuando el nodo raíz está escrito, que es efectiva cuando la nueva revisión se "compromete". Para encontrar un documento, se inicia al final del archivo, obtener el nodo raíz, y trabaje hacia abajo a su identificación del doc. La última revisión siempre será accesible de esta manera.

Otros consejos

CouchDB no almacena diff. Cuando se actualiza un documento, añade el documento completo nuevo con una nueva _rev y el mismo _id como la versión antigua. La versión antigua se elimina durante la compactación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top