Σύστημα συμπίεσης OpenZL, το οποίο ξεπερνά τα Zstd και XZ όσον αφορά την ταχύτητα και το επίπεδο συμπίεσης δομημένων δεδομένων

Η Meta* παρουσίασε το OpenZL, ένα κιτ εργαλείων συμπίεσης και αποσυμπίεσης δεδομένων που προσφέρει υψηλότερους ρυθμούς και ταχύτητα συμπίεσης από τις μορφές Zstd και XZ. Το OpenZL έχει σχεδιαστεί για αποτελεσματική συμπίεση δομημένων συνόλων δεδομένων, όπως αυτά που χρησιμοποιούνται στη μηχανική μάθηση, καθώς και αποθηκών δεδομένων που περιέχουν πεδία με διάφορους επαναλαμβανόμενους τύπους πληροφοριών. Το OpenZL είναι γραμμένο σε C/C++ και είναι ανοιχτού κώδικα με άδεια BSD.

Κατά τη συμπίεση μιας βάσης δεδομένων που περιείχε τον αστρονομικό κατάλογο άστρων του SAO, το OpenZL μείωσε το μέγεθος των δεδομένων κατά 2.06 φορές, ενώ ο αλγόριθμος zstd συμπίεσε τα δεδομένα κατά 1.31 φορές και ο αλγόριθμος XZ κατά 1.64 φορές. Επιπλέον, το OpenZL ξεπέρασε το zstd σε ταχύτητα συμπίεσης κατά 2 φορές (203 MB/s έναντι 115 MB/s) και το XZ κατά 65 φορές (203 MB/s έναντι 3.1 MB/s). Η αποσυμπίεση στο OpenZL ήταν ελαφρώς πιο αργή από το zstd (822 MB/s έναντι 890 MB/s) και 27 φορές πιο γρήγορη από το XZ.

 Σύστημα συμπίεσης OpenZL, το οποίο ξεπερνά τα Zstd και XZ όσον αφορά την ταχύτητα και το επίπεδο συμπίεσης δομημένων δεδομένων

Το OpenZL δεν είναι ένας αλγόριθμος γενικής χρήσης και εμφανίζει καλά αποτελέσματα μόνο για δεδομένα με γνωστή δομή. Η λειτουργία του OpenZL συνίσταται στην προσαρμοστική δημιουργία ενός packer με βάση την παρεχόμενη περιγραφή δεδομένων. Αυτό δημιουργεί κώδικα συμπίεσης βελτιστοποιημένο για μια συγκεκριμένη μορφή δεδομένων. Για την αποσυμπίεση χρησιμοποιείται ένα καθολικό πρόγραμμα αποσυμπίεσης, συμβατό με όλα τα δημιουργημένα packers.

Η συσκευασία και η αποσυσκευασία εκτελούνται χρησιμοποιώντας ένα μόνο βοηθητικό πρόγραμμα, το "zli", ή τη βιβλιοθήκη libopenzl. Η δομή δεδομένων περιγράφεται με τη μορφή προφίλ. Αυτό περιλαμβάνει ένα σύνολο προκαθορισμένων προφίλ που περιγράφουν τυπικές μορφές αποθήκευσης. Για παράδειγμα, ένα προφίλ για τη μορφή CSV ή δεδομένα που είναι αποθηκευμένα ως πίνακας 64-bit. Η συμπίεση είναι τόσο απλή όσο η επιλογή ενός προφίλ με την εντολή "zli list-profiles" και η έναρξη της διαδικασίας συμπίεσης με την εντολή "zli compress --profile profile_name". Για να αποσυσκευάσετε, απλώς εκτελέστε την εντολή "zli decompress".

Για συγκεκριμένες μορφές, πρέπει να δημιουργηθεί ένα προσαρμοσμένο προφίλ χρησιμοποιώντας την εντολή "zli train", η οποία αναγνωρίζει μοτίβα στα δεδομένα και δημιουργεί ένα προφίλ με βέλτιστο επίπεδο συμπίεσης. Χρησιμοποιώντας την επιλογή "--pareto-frontier", το δημιουργημένο προφίλ μπορεί να βελτιστοποιηθεί για να επιταχυνθεί η συμπίεση ή η αποσυμπίεση, εις βάρος της συμπίεσης. Η Απλή Γλώσσα Περιγραφής Δεδομένων (SDDL) μπορεί να χρησιμοποιηθεί για την περιγραφή σύνθετων μορφών με ένθετες δομές και τον ορισμό της διάταξης των μορφών δεδομένων μέσα σε δομές.

Η μέθοδος για τη δημιουργία βέλτιστων συσκευαστών βασίζεται σε ένα σύνολο πρωτόγονων κωδικοποιητών, καθένας από τους οποίους είναι πιο αποτελεσματικός για συγκεκριμένους τύπους δεδομένων και ακολουθίες. Για τη συμπίεση, σχηματίζεται ένα κατευθυνόμενο ακυκλικό γράφημα επεξεργασίας δεδομένων, με κωδικοποιητές ως κόμβους και παραλλαγές δεδομένων στην επεξεργασμένη μορφή ως ακμές. Ανάλογα με τον τύπο δεδομένων εισόδου, επιλέγεται μια αλυσίδα κωδικοποιητών που συμπιέζει βέλτιστα το εισερχόμενο στοιχείο δεδομένων. Με αυτήν τη διάταξη, η κεφαλίδα του αρχείου συμπιέζεται χρησιμοποιώντας έναν κωδικοποιητή, το πεδίο δεδομένων ακεραίων χρησιμοποιώντας έναν δεύτερο κωδικοποιητή, το πεδίο αυξανόμενου μετρητή χρησιμοποιώντας έναν τρίτο κωδικοποιητή και το πεδίο δεδομένων συμβολοσειράς χρησιμοποιώντας έναν τέταρτο κωδικοποιητή.

 Σύστημα συμπίεσης OpenZL, το οποίο ξεπερνά τα Zstd και XZ όσον αφορά την ταχύτητα και το επίπεδο συμπίεσης δομημένων δεδομένων


Πηγή: opennet.ru

Προσθέστε ένα σχόλιο