Какие данные на самом деле хранятся в базе данных B-дерева в CouchDB?

Я задаюсь вопросом, что на самом деле хранится в B-дереве базы данных CouchDB? CouchDB: Полное руководство говорит, что B-дерево базы данных используется для операций только добавления и что база данных хранится в единственном B-дереве (помимо B-деревьев на представление).

Таким образом, я предполагаю элементы данных, которые добавляются в файл базы данных, изменения документов, не целых документов:

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

Действительно ли это верно?

Если это верно, то, как текущий пересмотр документа определяется на основе такого B-дерева?

Разве это не означает, что CouchDB нужна отдельная база данных "представления" для индексации текущих изменений документов для сохранения O (зарегистрируйте n), доступ? Разве это не привело бы к условиям состязания при создании такого индекса? (насколько я знаю, CouchDB не использует блокировок записи).

6
задан Andrey Vlasovskikh 19 April 2010 в 21:31
поделиться

2 ответа

Файл базы данных на диске предназначен только для добавления; однако B-дерево концептуально модифицируется на месте. Когда вы обновляете документ,

  1. его листовой узел записывается (через добавление в файл БД)
  2. Его родительский узел перезаписывается для ссылки на новый лист (через добавление, конечно)
  3. Повторяйте шаг 2, пока вы обновляете корневой узел

. Когда корневой узел записывается, это эффективно, когда новая ревизия "фиксируется". Чтобы найти документ, вы начинаете с конца файла, получаете корневой узел и переходите к своему идентификатору документа. Таким образом всегда будет доступна последняя версия.

3
ответ дан 17 December 2019 в 04:44
поделиться

CouchDB не хранит различия. Когда вы обновляете документ, он добавляет весь новый документ с новым _rev и тем же _id, что и у старой версии. Старая версия удаляется при уплотнении.

2
ответ дан 17 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: