Meta* telah memperkenalkan OpenZL, sebuah toolkit kompresi dan dekompresi data yang menawarkan tingkat dan kecepatan kompresi yang lebih tinggi dibandingkan format Zstd dan XZ. OpenZL dirancang untuk kompresi yang efisien pada kumpulan data terstruktur, seperti yang digunakan dalam pembelajaran mesin, serta penyimpanan data yang berisi bidang-bidang dengan berbagai jenis informasi yang berulang. OpenZL ditulis dalam C/C++ dan bersumber terbuka di bawah lisensi BSD.
Saat mengompresi basis data yang berisi katalog bintang astronomi SAO, OpenZL mengurangi ukuran data sebesar 2.06 kali lipat, sementara algoritma zstd mengompresi data sebesar 1.31 kali lipat, dan XZ sebesar 1.64 kali lipat. Lebih lanjut, OpenZL mengungguli zstd dalam kecepatan kompresi sebesar 2 kali lipat (203 MB/dtk versus 115 MB/dtk), dan XZ sebesar 65 kali lipat (203 MB/dtk versus 3.1 MB/dtk). Dekompresi di OpenZL sedikit lebih lambat daripada zstd (822 MB/dtk versus 890 MB/dtk) dan 27 kali lebih cepat daripada XZ.

OpenZL bukanlah algoritma serbaguna dan hanya menunjukkan hasil yang baik untuk data dengan struktur yang diketahui. Operasi OpenZL terdiri dari pembuatan packer secara adaptif berdasarkan deskripsi data yang diberikan. Proses ini menghasilkan kode kompresi yang dioptimalkan untuk format data tertentu. Unpacker universal yang kompatibel dengan semua packer yang dihasilkan digunakan untuk dekompresi.
Pengemasan dan pembongkaran dilakukan menggunakan satu utilitas, "zli", atau pustaka libopenzl. Struktur data dijelaskan dalam bentuk profil. Profil ini mencakup serangkaian profil standar yang menjelaskan format penyimpanan umum. Misalnya, profil untuk format CSV atau data yang disimpan sebagai array 64-bit. Kompresi semudah memilih profil dengan perintah "zli list-profiles" dan memulai proses kompresi dengan perintah "zli compress --profile profile_name". Untuk membongkar, cukup jalankan "zli decompress".
Untuk format tertentu, profil kustom harus dibuat menggunakan perintah "zli train", yang mengidentifikasi pola dalam data dan menghasilkan profil dengan tingkat kompresi optimal. Dengan menggunakan opsi "--pareto-frontier", profil yang dibuat dapat dioptimalkan untuk mempercepat kompresi atau dekompresi, dengan mengorbankan kompresi. Bahasa Deskripsi Data Sederhana (SDDL) dapat digunakan untuk mendeskripsikan format kompleks dengan struktur bersarang dan menentukan tata letak format data dalam struktur.
Metode untuk membuat pengemas optimal didasarkan pada serangkaian enkoder primitif, yang masing-masing paling efektif untuk tipe data dan sekuens tertentu. Untuk kompresi, grafik pemrosesan data asiklik terarah dibentuk, dengan codec sebagai simpul dan varian data dalam format yang diproses sebagai tepi. Bergantung pada tipe data masukan, serangkaian codec dipilih yang secara optimal mengompresi elemen data yang masuk. Dengan pengaturan ini, header berkas dikompresi menggunakan satu codec, bidang data integer menggunakan codec kedua, bidang penghitung inkremental menggunakan codec ketiga, dan bidang data string menggunakan codec keempat.

Sumber: opennet.ru
