Git ODB backend for libgit2 and pyGit2 to save data in a set of packed binary files.
This backend aims for server side git repos with many small objects that needs to be movable into cold storage and then quickly restored.
Key issues this backend helps with:
The fs odb solution does have a packed format however one will typically still have many small files, this produces a high io overhead for small files. The layered solution allows the loading of a small number of layers (2000 objects per layer)
On write quickly sending a minimal amount of data so a storage api that has call based charging (eg s3)
On write the new layers are reported these can then be pushed to a save storage location allowing the repo servers to be stateless compared to tradition git fs this is also a much lower io cost of looping of all files and packing up/detecting changes.
Since the PagedArchive object can be kept im memory and reused on different instances of the Repo class the optimisation of keeping the lookup table in memory significantly speeds things up compared to io bound operations. This is useful on servers with limited io budgets.
python setup.py build_ext --inplace
python setup.py install