maxpack: efektywna deduplikacja wersjonowanych zbiorów plików
Deduplikacja międzyplikowa w maxpack analizuje cały zbiór plików jako jednolitą przestrzeń danych, eliminując powtórzenia między wersjami i obiektami. Dla 100 MB Node.js kompresja osiąga 3,9x, a dla 10 GB — 50,1x dzięki redukcji unikalnej zawartości do 0,6% na megabajt. Narzędzie jest skierowane do scenariuszy z wysokim nakładaniem się danych.
Zastosowanie w praktyce
maxpack wykazuje skuteczność na zbiorach z powtarzającą się zawartością:
- Wersje projektów git: wspólny kod jest przechowywany raz.
- Logi i zrzuty baz danych: sąsiednie kopie różnią się minimalnie.
- Migawki węzłów blockchain: nakładanie się stanów bazy.
- Wersjonowane zbiory danych: punkty kontrolne modeli, obrazy.
- Migawki maszyn wirtualnych i kontenerów: wspólne warstwy stanów.
- Budowanie frontendu: zgodności bajtowe pomimo haszy w nazwach.
Efekt wzmacnia się wraz ze wzrostem objętości i udziału duplikatów.
Testy wydajnościowe na Node.js v20
Testowanie na Apple M4 z 4 wątkami. Skalowanie od 100,1 MB do 10 GB według tagów git:
- Na początku wszystkie metody ~3,9x.
- maxpack L3 na 10 GB: 50,1x.
- tar+zstd: ~4,8x.
- 7z: ~8,6x.
Udział unikalnej zawartości spada, maxpack wykorzystuje to do zwiększenia kompresji.
Wyniki na CPython 3.12 (817,3 MB, 8 tagów)
| Metoda | Archiwum | Kompresja | Pakowanie | Rozpakowanie |
|-----------------|------------|-----------|-----------|--------------|
| 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 zmniejsza archiwum 7-krotnie w porównaniu do tar+zstd -3, wyprzedzając w czasie.
Wyniki na Go 1.23 (974,8 MB, 8 tagów)
| Metoda | Archiwum | Kompresja | Pakowanie | Rozpakowanie |
|-----------------|------------|-----------|-----------|--------------|
| 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 |
Archiwum 2,3 razy mniejsze niż 7z, pakowanie tańsze w CPU.
Na projektach fd, lsd, bat zysk 41,6–70,3% w rozmiarze, deduplikacja do 81,3%.
Kontrolowane zbiory danych
High-dedup (100 plików, 90% duplikatów, 12 MB):
| Zbiór danych | Metoda | Archiwum | Kompresja | 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% |
Archiwum 3,2 razy mniejsze. Na zbiorach bez powtórzeń — paritet lub niewielki narzut.
Porównanie prędkości
Rozpakowanie szybsze 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.
Pakowanie zależy od struktury: na danych z powtórzeniami — paritet, na unikalnych — narzut.
Ograniczenia użytkowania
- Unikalne dane: minimalna deduplikacja.
- Małe zbiory: analiza się nie opłaca.
- Dostęp losowy: ustępuje wyspecjalizowanym magazynom.
Narzędzie dla wersjonowanych zbiorów z silnym nakładaniem się.
Pozycjonowanie względem analogów
maxpack łączy właściwości pakowania i systemów migawek:
| Właściwość | tar+zstd/7z | borg/restic | maxpack |
|-----------------|-------------|-------------|-----------|
| Deduplikacja | Nie | Per-chunk | Tak |
| Solid compression | Tak | Nie | Tak |
| Wynik | Jeden plik | Repozytorium| Jeden plik|
| Przyrostowość | Nie | Tak | Append |
| Szyfrowanie | Zależy | Tak | AES-256-GCM |
Nadaje się do przenośnych archiwów wersji.
Testowanie na własnych danych
maxpack pack your_data/ -o test.maxpack
tar cf - your_data/ | zstd -3 > test.tar.zst
ls -lh test.maxpack test.tar.zst
Co jest ważne
- Kompresja rośnie z objętością danych wersjonowanych do 50x+.
- Deduplikacja do 90% na zbiorach wysokopowtarzalnych.
- Rozpakowanie szybsze niż tar+zstd o 1,5–2,2x.
- Archiwa 2–7 razy mniejsze od konkurencji na rzeczywistych projektach.
- Wsparcie przyrostowości i AES-256-GCM.
— Editorial Team
Brak komentarzy.