Система масштабируется для команд разного размера и может быть запущена как на компьютере разработчика через запуск одного исполняемого файла без внешних зависимостей, так и развёрнута в форме централизованного сервера для координации работы очень больших команд.
Lore состоит из двух систем — подсистема хранения данных и подсистема управления версиями, отвечающая за создание ревизий, веток и операции слияния.
Подсистема хранения формируется из двух хранилищ — постоянное (immutable) хранилище контента с адресацией по хэшам и хранилище в формате ключ/значение для меняющихся метаданных, таких как указатели на ветки. Для хранения данных на централизованном сервере и обеспечения отказоустойчивости могут подключаться различные бэкенды, например, для постоянного хранения можно использовать AWS S3, а для метаданных DynamoDB.
Для отражения состояния репозитория и гарантирования неизменности цепочки ревизий задействована структура «дерево Меркла» (Merkle Tree), в которой каждая ветка верифицирует все нижележащие ветки и узлы благодаря древовидному хешированию. Данные в репозитории адресуются по хэшам содержимого, что упрощает операции сравнения и контроль целостности. Хэш каждой ревизии охватывает связанное с ней состояние, хэши родительских ревизий и хэши данных. Большие файлы хранятся разделёнными на фрагменты.
Предоставляются типичные для систем управления версиями возможности, такие как коммиты, staging-черновики, создание веток и оценка изменений. Среди расширенной функциональности: разграничение доступа участников; разрешение конфликтов; дедупликация на уровне фрагментов; возможность работы с неполной копией рабочего дерева (недостающие данные подгружаются по мере появления необходимости в них); кэширование хранимых данных; легковесные операции создания веток и быстрое переключение между ветками (ветки реализованы через ссылки, которые не приводят к дублированию данных).
Источник: http://www.opennet.ru/opennews/art.shtml?num=65711
