Question

Je me demande ce qui est réellement stocké dans une base de données CouchDB B-tree? CouchDB: The Definitive Guide indique que la base de données est utilisé B-tree pour les opérations de append seule et que une base de données est stockée dans un seul B-tree (en plus de B-arbres à la carte).

Je suppose que les éléments de données qui sont ajoutées au fichier de base de données sont révisions des documents, et non l'ensemble des documents:

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

Est-il vrai?

Si elle true, alors comment la révision en cours d'un document est déterminé sur la base d'un tel B-tree?

ne pas dire, que CouchDB a besoin d'une base de données "vue" séparée pour l'indexation révisions de documents à conserver O (log n) accès? Ne serait-il conduire à des conditions de course tout en construisant un tel indice? (Pour autant que je sache, CouchDB utilise pas de verrou en écriture).

Était-ce utile?

La solution

Le fichier de base de données sur le disque est append seule; mais le B-tree est modifié sur le plan conceptuel en place. Lorsque vous mettez à jour un document,

  1. Son nœud feuille est écrit (via append dans le fichier DB)
  2. Son nœud parent est réécrite pour faire référence à la nouvelle feuille (via append bien sûr)
  3. Répétez l'étape 2 jusqu'à ce que vous mettez à jour le nœud racine

Lorsque le nœud racine est écrit, qui est effectivement lorsque la version plus récente est « engagée ». Pour trouver un document, vous commencez à la fin du fichier, obtenir le nœud racine, et travailler jusqu'à votre ID doc. La dernière révision sera toujours accessible ainsi.

Autres conseils

CouchDB ne stocke pas diffs. Lorsque vous mettez à jour un document, il ajoute le tout nouveau document avec un nouveau _rev et même _id que l'ancienne version. L'ancienne version est supprimée lors du compactage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top