DuckDB 0.6.0, varian SQLite untuk kueri analitik dipublikasikan

Rilis DBMS DuckDB 0.6.0 tersedia, menggabungkan properti SQLite seperti kekompakan, kemampuan untuk terhubung dalam bentuk perpustakaan tertanam, menyimpan database dalam satu file dan antarmuka CLI yang nyaman, dengan alat dan optimasi untuk mengeksekusi kueri analitik yang mencakup sebagian besar data yang disimpan, misalnya yang menggabungkan seluruh konten tabel atau menggabungkan beberapa tabel besar. Kode proyek didistribusikan di bawah lisensi MIT. Pengembangannya masih dalam tahap pembentukan rilis eksperimental, karena format penyimpanannya belum stabil dan berubah dari versi ke versi.

DuckDB menyediakan dialek SQL tingkat lanjut yang mencakup kemampuan tambahan untuk menangani kueri yang sangat kompleks dan memakan waktu. Penggunaan tipe kompleks (array, struktur, gabungan) dan kemampuan untuk mengeksekusi subkueri korelasi yang arbitrer dan bersarang didukung. Ini mendukung menjalankan beberapa kueri secara bersamaan, menjalankan kueri langsung dari file CSV dan Parket. Dimungkinkan untuk mengimpor dari DBMS PostgreSQL.

Selain kode shell dari SQLite, proyek ini menggunakan parser dari PostgreSQL di perpustakaan terpisah, komponen Date Math dari MonetDB, implementasi fungsi jendelanya sendiri (berdasarkan algoritma Agregasi Pohon Segmen), prosesor ekspresi reguler berdasarkan perpustakaan RE2, pengoptimal kuerinya sendiri, dan mekanisme kontrol MVCC untuk eksekusi tugas secara simultan (Kontrol Konkurensi Multi-Versi), serta mesin eksekusi kueri yang divektorisasi berdasarkan algoritma Eksekusi Kueri Hyper-Pipelining, yang memungkinkan kumpulan nilai dalam jumlah besar ​​untuk diproses sekaligus dalam satu operasi.

Perubahan dalam rilis baru meliputi:

  • Pekerjaan terus meningkatkan format penyimpanan. Mode penulisan disk yang optimis telah diterapkan, di mana ketika sejumlah besar data dimuat dalam satu transaksi, data tersebut dikompresi dan ditulis dalam mode streaming ke file dari database, tanpa menunggu transaksi dikonfirmasi dengan perintah COMMIT . Ketika perintah COMMIT diterima, data sudah ditulis ke disk, dan ketika ROLLBACK dijalankan, data tersebut dibuang. Sebelumnya, data awalnya disimpan sepenuhnya ke memori, dan ketika dikomit, disimpan ke disk.
  • Menambahkan dukungan untuk memuat data secara paralel ke dalam tabel terpisah, yang memungkinkan Anda meningkatkan kecepatan pemuatan secara signifikan pada sistem multi-inti. Misalnya, pada rilis sebelumnya, memuat database dengan 150 juta baris pada CPU 10 inti membutuhkan waktu 91 detik, namun di versi baru operasi ini selesai dalam 17 detik. Ada dua mode pemuatan paralel - dengan pelestarian urutan catatan dan tanpa pelestarian urutan.
  • Untuk mengompresi data, algoritma FSST (Fast Static Symbol Table) digunakan, yang memungkinkan Anda mengemas data ke dalam string menggunakan kamus umum untuk kecocokan tipikal. Penggunaan algoritma baru memungkinkan pengurangan ukuran database pengujian dari 761MB menjadi 251MB.
  • Algoritma simpanse dan Patas telah diusulkan untuk mengompresi bilangan floating point (DOUBLE dan FLOAT). Dibandingkan dengan algoritma Gorillas sebelumnya, Chimp memberikan tingkat kompresi yang lebih tinggi dan dekompresi yang lebih cepat. Algoritme Patas tertinggal dari Chimp dalam rasio kompresi, tetapi jauh lebih cepat dalam kecepatan dekompresi, yang hampir tidak berbeda dengan membaca data yang tidak terkompresi.
  • Menambahkan kemampuan eksperimental untuk memuat data dari file CSV ke beberapa aliran paralel (SET eksperimental_parallel_csv=true), yang secara signifikan mengurangi waktu yang diperlukan untuk memuat file CSV berukuran besar. Misalnya, jika opsi ini diaktifkan, waktu pengunduhan untuk file CSV 720 MB berkurang dari 3.5 menjadi 0.6 detik.
  • Kemungkinan eksekusi paralel dari pembuatan indeks dan operasi manajemen telah diterapkan. Misalnya, operasi CREATE INDEX pada kolom dengan 16 juta catatan dikurangi dari 5.92 menjadi 1.38 detik.
  • Mengaktifkan paralelisasi operasi agregasi dalam kueri yang berisi ekspresi “COUNT(DISTINCT col)”.
  • SQL telah menambahkan dukungan untuk tipe UNION, yang memungkinkan beberapa tipe terikat ke satu elemen (misalnya, “UNION(num INT, error VARCHAR))”).
  • SQL menyediakan kemampuan untuk membentuk kueri yang dimulai dengan kata “FROM” dan bukan “SELECT”. Dalam hal ini, diasumsikan bahwa kueri dimulai dengan "PILIH *".
  • SQL telah menambahkan dukungan untuk ekspresi COLUMNS, yang memungkinkan Anda melakukan operasi pada beberapa kolom tanpa menduplikasi ekspresi. Misalnya, “PILIH MIN(KOLOM(*)) dari obs;” akan menyebabkan fungsi MIN dijalankan untuk setiap kolom dalam tabel obs, dan "SELECT COLUMNS('val[0-9]+') from obs;" untuk kolom dengan nama yang terdiri dari "val" dan angka.
  • Menambahkan dukungan untuk operasi pada daftar, misalnya, “SELECT [x + 1 for x in [1, 2, 3]] AS l;”.
  • Konsumsi memori telah dioptimalkan. Secara default, platform Linux menggunakan perpustakaan jemalloc untuk manajemen memori. Peningkatan kinerja operasi penggabungan hash secara signifikan ketika memori terbatas.
  • Menambahkan mode keluaran “.mode duckbox” ke antarmuka baris perintah, yang membuang kolom tengah dengan mempertimbangkan lebar jendela terminal (cocok untuk menilai secara visual dengan cepat hasil kueri dengan sejumlah besar kolom, seperti “SELECT * FROM tbl”, yang dalam mode normal tersebar di beberapa baris). Dengan menggunakan parameter “.maxrows X”, Anda juga dapat membatasi jumlah baris yang ditampilkan.
  • CLI menyediakan pelengkapan otomatis input dengan mempertimbangkan konteks (input kata kunci, nama tabel, fungsi, nama kolom, dan nama file selesai).
  • CLI memiliki indikator kemajuan kueri yang diaktifkan secara default.

Sumber: opennet.ru

Tambah komentar