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