maxpack: Effiziente Deduplizierung für versionierte Dateisätze
Die inter-file Deduplizierung in maxpack analysiert den gesamten Dateisatz als einheitlichen Datenraum und eliminiert Duplikate über Versionen und Objekte hinweg. Bei 100 MB Node.js erreicht die Kompression 3,9-fach; bei 10 GB sogar 50,1-fach, indem der einzigartige Inhalt auf 0,6 % pro Megabyte reduziert wird. Das Tool ist für Szenarien mit hoher Datenüberlappung optimiert.
Anwendungen in der Praxis
maxpack glänzt bei Datensätzen mit wiederholtem Inhalt:
- Git-Projektversionen: Gemeinsamer Code wird nur einmal gespeichert.
- Logs und Datenbank-Dumps: Benachbarte Exporte unterscheiden sich minimal.
- Blockchain-Node-Snapshots: Überlappungen im Datenbankzustand.
- Versionierte Datensätze: Model-Checkpoints, Bilder.
- VM- und Container-Snapshots: Gemeinsame Zustandsschichten.
- Frontend-Builds: Bytegenaue Übereinstimmungen trotz Hashes in Dateinamen.
Der Effekt verstärkt sich mit wachsendem Volumen und Duplikatanteil.
Benchmarks mit Node.js v20
Tests auf Apple M4 mit 4 Threads. Skalierung von 100,1 MB bis 10 GB über Git-Tags:
- Anfangs alle Methoden ~3,9-fach.
- maxpack L3 bei 10 GB: 50,1-fach.
- tar+zstd: ~4,8-fach.
- 7z: ~8,6-fach.
Der Anteil einzigartiger Inhalte sinkt, was maxpack eine stärkere Kompression ermöglicht.
Ergebnisse bei CPython 3.12 (817,3 MB, 8 Tags)
| Methode | Archiv | Kompression | Pack | Entpack |
|-----------------|-----------|-------------|--------|---------|
| maxpack L3 | 31,0 MB | 26,4-fach | 0,9 s | 3,1 s |
| tar+zstd -3 | 215,3 MB | 3,8-fach | 16,5 s | 11,9 s |
| tar+zstd -19 | 170,3 MB | 4,8-fach | 113,7 s| 17,0 s |
| tar+xz | 168,3 MB | 4,9-fach | 41,6 s | 13,7 s |
maxpack verkleinert das Archiv um das 7-fache im Vergleich zu tar+zstd -3 und ist schneller.
Ergebnisse bei Go 1.23 (974,8 MB, 8 Tags)
| Methode | Archiv | Kompression | Pack | Entpack |
|-----------------|-----------|-------------|---------|---------|
| maxpack L3 | 31,0 MB | 31,4-fach | 14,4 s | 14,7 s |
| tar+zstd -3 | 210,1 MB | 4,6-fach | 40,5 s | 35,1 s |
| tar+xz | 149,5 MB | 6,5-fach | 294,0 s | 40,5 s |
| 7z -mx=9 | 70,7 MB | 13,8-fach | 312,4 s | 11,4 s |
Das Archiv ist 2,3-mal kleiner als bei 7z und verbraucht weniger CPU beim Packen.
Bei Projekten wie fd, lsd, bat beträgt die Größenreduktion 41,6–70,3 %, mit Deduplizierung bis zu 81,3 %.
Kontrollierte Datensätze
High-dedup (100 Dateien, 90 % Duplikate, 12 MB):
| Datensatz | Methode | Archiv | Kompression | vs tar+zstd-3 |
|-------------|--------------|-------------|-------------|---------------|
| High-dedup | tar+zstd-3 | 4.102.948 | 3,1-fach | – |
| High-dedup | maxpack L3 | 1.290.154 | 10,0-fach | -68,6 % |
Das Archiv ist 3,2-mal kleiner. Bei duplikatfreien Sätzen: Parität oder leichter Overhead.
Geschwindigkeitsvergleich
Entpacken ist 1,5–2,2-mal schneller:
- Diverses Entpacken: maxpack 21 ms vs. 32 ms.
- High-dedup Entpacken: 29 ms vs. 65 ms.
- Großes Entpacken: 71 ms vs. 120 ms.
Packen hängt von der Struktur ab: Parität bei Duplikaten, Overhead bei Einzigartigkeit.
Einschränkungen der Nutzung
- Einzigartige Daten: Minimale Deduplizierung.
- Kleine Sätze: Analyse nicht wirtschaftlich.
- Zufallszugriff: Unterlegen gegenüber spezialisierten Speichern.
Tool für versionierte Sätze mit starker Überlappung.
Positionierung gegenüber Alternativen
maxpack kombiniert Eigenschaften von Packer- und Snapshot-Systemen:
| Feature | tar+zstd/7z | borg/restic | maxpack |
|-------------------|-------------|-------------|-----------|
| Deduplizierung | Nein | Per-Chunk | Ja |
| Solide Kompression| Ja | Nein | Ja |
| Ergebnis | Einzeldatei | Repository | Einzeldatei|
| Inkrementell | Nein | Ja | Anhängen |
| Verschlüsselung | Abhängig | Ja | AES-256-GCM|
Geeignet für portable Versionsarchive.
Testen mit eigenen Daten
maxpack pack your_data/ -o test.maxpack
tar cf - your_data/ | zstd -3 > test.tar.zst
ls -lh test.maxpack test.tar.zst
Wichtige Punkte
- Kompression skaliert mit Versionierungsvolumen bis über 50-fach.
- Deduplizierung bis 90 % bei hoch repetitiven Sätzen.
- Entpacken 1,5–2,2-mal schneller als tar+zstd.
- Archive 2–7-mal kleiner als Konkurrenz bei realen Projekten.
- Unterstützung für Inkrementalität und AES-256-GCM.
— Editorial Team
Noch keine Kommentare.