Subversion FSFS - как хранятся ревизии в хранилище?

Я хотел бы понять, как Subversion хранит ревизии в FSFS и как создается представление / шейпшот для данного номера ревизии.

Что я понял из Googling, так это то, что FSFS представляет собой простую структуру каталогов, с подкаталогами для каждой ревизии, такими как:

..svn/rev/0/
..svn/rev/1/
..svn/rev/2/

Предположительно, только изменения (дельты) записываются в каждом каталоге редакций. Значит ли это, что при создании представления / снимка для ревизии N все дельты от 0 до N должны быть зациклены?

Любые ссылки на ресурсы по этому поводу высоко ценятся.

Спасибо

2 ответа

Решение

Subversion хранит все дельты каждой ревизии в одном (плоском) файле ревизии. Каждый файл / папка внутри хранилища (называемый "узлом") имеет внутренний идентификатор.

Один файл ревизии состоит из всех сжатых дельт для этой конкретной фиксации, однако дельты не соответствуют предыдущей ревизии, а используют схему под названием "пропущенные дельты", позволяющую избежать линейного увеличения времени поиска для растущей истории версий.

Важно то, что FSFS использует прямые дельты вместо обратных дельт с использованием BDB-backend. Таким образом, FSFS быстрее при коммитах, но медленнее при проверке, характеристики производительности Berkeley DB совсем другие.

Вы можете прочитать намного больше в заметке о дизайне SVN о FSFS.

Вот ссылка на ссылку на структуру FSFS (включая описание формата файла): https://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_fs_fs/structure

Другие вопросы по тегам