API libgit2 для создания деревьев и упаковка «на лету»

Мы разрабатываем инструмент, который должен создавать очень большие деревья git, содержащие множество объектов (~ 10 000 – 100 000). Ввод-вывод для многих файлов, соответствующих этим объектам, будет узким местом, поэтому нам интересно, можно ли будет сделать что-то вроде повторной упаковки на лету. Я представляю, как это делается либо при выполнении git_blob_create_frombuffer(), либо при выполнении git_treebuilder_insert().

Как вы думаете, это было бы целесообразно и осуществимо? В случае, если это невозможно, есть ли у вас какие-либо предложения о том, как справиться с этим вариантом использования с libgit2?


person Marco Pantaleoni    schedule 15.12.2014    source источник


Ответы (1)


Похоже, что может быть некоторое непонимание того, что такое дерево и как оно создается.

Создание дерева никогда не должно вызывать перепаковку. Когда вы создаете дерево, у вас уже есть объекты в базе данных. Таким образом, самый быстрый способ создать дерево — это оставить уже существующие данные в покое. Создание пакета из BLOB-объектов означало бы чтение их всех и сравнение. Оставить их в покое — это по определению самое быстрое, что вы можете сделать, так как это не требует никакой работы.

В какой-то момент может иметь смысл открыть способ записи объектов непосредственно в пакетный файл, но в настоящее время это невозможно.

Вы говорите о будущем, что говорит о том, что вы еще не измерили или не реализовали это. Пока вы этого не сделаете, любые другие советы будут бесполезны, поскольку они не будут иметь никакого отношения к тому, что вы делаете со своим кодом.

person Carlos Martín Nieto    schedule 16.12.2014