Как couchdb извлекает все предыдущие ревизии? - PullRequest
6 голосов
/ 22 июня 2011

Из того, что я понимаю, реализация Btree в CouchDB фактически использует технику Shadowing, и каждое обновление будет создавать новый root, следующие выдержки из этого PDF (похоже, что он реализует алгоритм лучше, чем традиционное теневое копирование).

Затенение означает, что для обновления страница на диске, вся страница читается в память, модифицированный и позже записывается на диск по другому место нахождения. Когда страница затенена, ее место на диске меняется, это создает необходимость обновления (и тени) непосредственный предок страницы с новый адрес. Затенение распространяется до корня файловой системы.

Как couchdb осуществляет выборку всех листовых ревизий, насколько это возможно (поскольку некоторые ревизии удаляются в процессе сжатия)? Хранит ли couch указатель, который указывает на предыдущие ревизии?

Спасибо Chang

Ответы [ 2 ]

6 голосов
/ 22 июня 2011

Couch не гарантирует, что старые версии документа могут быть восстановлены:

Термины версия и редакция могут показаться знакомыми (если вы программируете без контроля версий, бросьте эту книгу прямо сейчас и начните изучение одной из популярных систем). Использование новых версий для документа Изменения работают так же, как контроль версий, но есть важное отличие: CouchDB не гарантирует сохранение старых версий вокруг.

Источник: O'Reilly CouchDB Полное руководство, стр. 40.

Почему это? Поскольку CouchDB не является системой управления версиями : существует механизм управления версиями для одновременного доступа к базе данных. Подробное руководство касается этого на страницах 14-15.

4 голосов
/ 04 июля 2011

По счастливой случайности коммиттер CouchDB и лидер сообщества Адам Коколоски недавно объяснил это в списке рассылки.

Вот что он сказал:

"Каждый лист видентификатор btree [хранит] дерево ревизий, содержащее указатели на все доступные ревизии документа. Для извлечения старой ревизии (до сжатия) или конфликтующей версии документа требуется ровно столько же операций ввода-вывода, сколько для извлечениятекущий. "

Если я правильно понимаю, теневое копирование вообще не используется для сокрытия старых версий документов, а скорее целых деревьев версий, которые больше не имеют смысла.

...