Powrót do strony głównej

maxpack: deduplikacja danych wersjonowanych

maxpack implementuje deduplikację międzyplikową dla zbiorów danych wersjonowanych, osiągając kompresję do 50x na dużych wolumenach. Benchmarki pokazują przewagę nad tar+zstd i 7z pod względem rozmiaru i szybkości dekompresji. Narzędzie nadaje się do tagów git, snapshotów i datasetów z powtarzalną zawartością.

Deduplikacja maxpack: 50x kompresja wersji Node.js i CPython
Advertisement 728x90

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.

Google AdInline article slot

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 |

Google AdInline article slot

|-----------------|------------|-----------|-----------|--------------|

| 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 |

Google AdInline article slot

| 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

Advertisement 728x90

Czytaj dalej