Я задаюсь вопросом, что на самом деле хранится в B-дереве базы данных CouchDB? CouchDB: Полное руководство говорит, что B-дерево базы данных используется для операций только добавления и что база данных хранится в единственном B-дереве (помимо B-деревьев на представление).
Таким образом, я предполагаю элементы данных, которые добавляются в файл базы данных, изменения документов, не целых документов:
+---------|### ...
| |
+------|###|------+ ... ---+
| | | |
+------+ +------+ +------+ +------+
| doc1 | | doc2 | | doc1 | ... | doc1 |
| rev1 | | rev1 | | rev2 | | rev7 |
+------+ +------+ +------+ +------+
Действительно ли это верно?
Если это верно, то, как текущий пересмотр документа определяется на основе такого B-дерева?
Разве это не означает, что CouchDB нужна отдельная база данных "представления" для индексации текущих изменений документов для сохранения O (зарегистрируйте n), доступ? Разве это не привело бы к условиям состязания при создании такого индекса? (насколько я знаю, CouchDB не использует блокировок записи).
Файл базы данных на диске предназначен только для добавления; однако B-дерево концептуально модифицируется на месте. Когда вы обновляете документ,
. Когда корневой узел записывается, это эффективно, когда новая ревизия "фиксируется". Чтобы найти документ, вы начинаете с конца файла, получаете корневой узел и переходите к своему идентификатору документа. Таким образом всегда будет доступна последняя версия.
CouchDB не хранит различия. Когда вы обновляете документ, он добавляет весь новый документ с новым _rev и тем же _id, что и у старой версии. Старая версия удаляется при уплотнении.