maxpack: Efektivní deduplikace verzovaných souborových sad
Mezisouborová deduplikace v maxpack analyzuje celou sadu souborů jako jednotný datový prostor, odstraňuje duplicity mezi verzemi a objekty. Na 100 MB Node.js dosahuje komprese 3,9x, na 10 GB pak 50,1x díky snížení jedinečného obsahu na 0,6 % na megabajt. Nástroj je zaměřen na scénáře s vysokým překryvem dat.
Použití v reálných úlohách
maxpack prokazuje efektivitu na sadách s opakujícím se obsahem:
- Verze git-projektů: společný kód se ukládá pouze jednou.
- Logy a výstupy z databází: sousední exporty se liší minimálně.
- Snapshoty blockchainových uzlů: překryvy ve stavu databáze.
- Verzované datové sady: kontrolní body modelů, obrázky.
- Snapshoty virtuálních strojů a kontejnerů: společné vrstvy stavů.
- Frontendové buildy: bajtové shody navzdory hashům v názvech.
Efekt se zesiluje s růstem objemu a podílu duplicit.
Benchmarky na Node.js v20
Testování na Apple M4 se 4 vlákny. Škálování od 100,1 MB do 10 GB podle git tagů:
- Na začátku všechny metody ~3,9x.
- maxpack L3 na 10 GB: 50,1x.
- tar+zstd: ~4,8x.
- 7z: ~8,6x.
Podíl jedinečného obsahu klesá, maxpack toho využívá pro růst komprese.
Výsledky na CPython 3.12 (817,3 MB, 8 tagů)
| Metoda | Archiv | Komprese | Pack | Unpack |
|-----------------|-----------|----------|-------|--------|
| maxpack L3 | 31,0 MB | 26,4x | 0,9 s | 3,1 s |
| tar+zstd -3 | 215,3 MB | 3,8x | 16,5 s| 11,9 s |
| tar+zstd -19 | 170,3 MB | 4,8x | 113,7 s|17,0 s |
| tar+xz | 168,3 MB | 4,9x | 41,6 s| 13,7 s |
maxpack zmenšuje archiv 7krát oproti tar+zstd -3, předčí i v čase.
Výsledky na Go 1.23 (974,8 MB, 8 tagů)
| Metoda | Archiv | Komprese | Pack | Unpack |
|-----------------|-----------|----------|--------|--------|
| maxpack L3 | 31,0 MB | 31,4x | 14,4 s | 14,7 s |
| tar+zstd -3 | 210,1 MB | 4,6x | 40,5 s | 35,1 s |
| tar+xz | 149,5 MB | 6,5x | 294,0 s| 40,5 s |
| 7z -mx=9 | 70,7 MB | 13,8x | 312,4 s| 11,4 s |
Archiv je 2,3krát menší než 7z, balení je levnější na CPU.
Na projektech fd, lsd, bat je zisk 41,6–70,3 % ve velikosti, deduplikace až 81,3 %.
Řízené datové sady
High-dedup (100 souborů, 90 % duplicit, 12 MB):
| Datová sada | Metoda | Archiv | Komprese | vs tar+zstd-3 |
|-------------|--------------|------------|----------|---------------|
| High-dedup | tar+zstd-3 | 4 102 948 | 3,1x | – |
| High-dedup | maxpack L3 | 1 290 154 | 10,0x | -68,6 % |
Archiv je 3,2krát menší. Na sadách bez opakování – parita nebo malý overhead.
Porovnání rychlostí
Rozbalení je rychlejší o 1,5–2,2x:
- Diverse Unpack: maxpack 21 ms vs 32 ms.
- High-dedup Unpack: 29 ms vs 65 ms.
- Big Unpack: 71 ms vs 120 ms.
Balení závisí na struktuře: na datech s opakováním – parita, na jedinečných – overhead.
Omezení použití
- Jedinečná data: minimální deduplikace.
- Malé sady: analýza se nevyplatí.
- Náhodný přístup: zaostává za specializovanými úložišti.
Nástroj pro verzované sady se silným překryvem.
Pozice vůči analogům
maxpack kombinuje vlastnosti balení a snapshotových systémů:
| Vlastnost | tar+zstd/7z | borg/restic | maxpack |
|--------------------|-------------|-------------|-----------|
| Deduplikace | Ne | Per-chunk | Ano |
| Solid komprese | Ano | Ne | Ano |
| Výsledek | Jeden soubor| Repozitář | Jeden soubor|
| Inkrementálnost | Ne | Ano | Append |
| Šifrování | Závisí | Ano | AES-256-GCM |
Hodí se pro přenosné archivy verzí.
Testování na vlastních datech
maxpack pack your_data/ -o test.maxpack
tar cf - your_data/ | zstd -3 > test.tar.zst
ls -lh test.maxpack test.tar.zst
Co je důležité
- Komprese roste s objemem verzovaných dat až na 50x+.
- Deduplikace až 90 % na vysoce opakujících se sadách.
- Rozbalení je rychlejší než tar+zstd o 1,5–2,2x.
- Archivy jsou 2–7krát menší než konkurence na reálných projektech.
- Podpora inkrementálnosti a AES-256-GCM.
— Editorial Team
Zatím žádné komentáře.