Andreas Kupries suggests a high level architecture based on maintaining two separate entities: a Mirror and a PackagePedia:

split `Mirror` from `PackagePedia`

different use cases - their schemata can be connected, but do not overlap.

Mirror: Backing up Repositories - Which provide Packages
Pedia : Keeping order about (Projects, Variants) Packages - Have sources In Repositores