Kandidat rilis libmdbx v1.0 kedua setelah lima tahun pengembangan.

perpustakaan libmdbx adalah turunan LMDB yang didesain ulang secara signifikan - database nilai kunci tertanam yang berkinerja sangat tinggi dan ringkas.
Versi saat ini v0.5 adalah rilis teknis, menandai selesainya segala perbaikan dan transisi ke fase pengujian dan stabilisasi akhir publik, dengan pembentukan selanjutnya dari rilis penuh pertama perpustakaan.

LMDB adalah DBMS nilai kunci tertanam transaksional yang cukup terkenal berdasarkan pohon B+ tanpa pencatatan proaktif, yang memungkinkan sekumpulan proses multi-utas bekerja secara kompetitif dan sangat efisien dengan database yang dibagikan secara lokal (bukan jaringan). Pada gilirannya, MDBX lebih cepat dan lebih dapat diandalkan daripada LMDB, sementara libmdbx mempertahankan semua fitur utama dari pendahulunya, seperti ACID dan pembacaan non-pemblokiran dengan penskalaan linier di seluruh inti CPU, dan juga menambahkan beberapa yang baru.

Penjelasan tentang perbedaan dan peningkatan libmdbx relatif terhadap LMDB layak untuk dijadikan artikel terpisah (rencananya akan dipublikasikan di Habré dan Medium). Di sini pantas untuk menyebutkan yang paling penting dan penting:

  • Pada dasarnya, lebih banyak perhatian diberikan pada kualitas kode, pengujian, dan pemeriksaan otomatis.
  • Kontrol yang jauh lebih besar selama pengoperasian, mulai dari pemeriksaan parameter hingga audit internal terhadap struktur database.
  • Pemadatan otomatis dan manajemen ukuran database otomatis.
  • Format database tunggal untuk rakitan 32-bit dan 64-bit.
  • Estimasi ukuran sampel berdasarkan rentang (estimasi kueri rentang).
  • Dukungan untuk kunci dua kali lebih besar dari pancake dan ukuran halaman database yang dapat dipilih pengguna.

Kandidat rilis libmdbx adalah hasil keputusan (lihat di bawah) untuk memisahkan proyek MDBX dan MithrilDB pada Agustus 2019. Pada saat yang sama, libmdbx memutuskan untuk menghilangkan utang teknis maksimum (rasional) dan menstabilkan perpustakaan. Faktanya, 2-3 kali lebih banyak yang telah dilakukan ke arah yang ditentukan dibandingkan perkiraan dan rencana awal:

  • Dukungan untuk Mac OS dan platform lapis kedua telah diterapkan: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Dukungan AIX dan HP-UX dapat ditambahkan sesuai kebutuhan.
  • Kode dibersihkan menggunakan Undefinisi Behavior Sanitizer dan Address Sanitizer, semua peringatan saat membangun dengan -Wpedantic, semua peringatan Coverity Static Analyzer, dll. dihilangkan.
  • Memperbarui Deskripsi API.
  • Penggabungan kode sumber untuk kemudahan penyematan.
  • dukungan CMake.
  • Dukungan untuk transaksi bersarang.
  • Menggunakan bootid untuk menentukan apakah OS telah di-boot ulang (database kotor berhenti).
  • Penghitungan ujung ke ujung halaman yang diperbarui/lama dan informasi transaksi yang diperluas.
  • Opsi MDBX_ACCEDE untuk menghubungkan ke database yang sudah terbuka dalam mode yang kompatibel.
  • Menggunakan pemblokiran OFD bila tersedia.
  • Cadangan panas di dalam pipa.
  • Algoritme pengurutan internal yang dioptimalkan secara khusus (hingga 2-3 kali lebih cepat dari qsort() dan hingga 30% lebih cepat dari std::sort()).
  • Panjang kunci maksimum telah ditingkatkan.
  • Kontrol otomatis baca ke depan (strategi caching file database di memori).
  • Pemadatan otomatis yang lebih agresif dan lebih cepat.
  • Strategi yang lebih optimal untuk menggabungkan halaman pohon B+.
  • Kontrol sistem file non-lokal (NFS, Samba, dll.) untuk mencegah kerusakan database jika digunakan secara tidak benar.
  • Rangkaian tes telah diperluas.

Pengembangan libmdbx versi "berikutnya" akan dilanjutkan sebagai proyek terpisah MithrilDB, sedangkan vektor pengembangan MDBX versi “saat ini” ditujukan untuk membekukan kumpulan fitur dan menstabilkannya. Keputusan ini diambil karena tiga alasan:

  • Benar-benar tidak kompatibel: MithrilDB memerlukan format file database yang berbeda (tidak kompatibel) dan API yang berbeda (tidak kompatibel) untuk mengimplementasikan semua fitur yang direncanakan.
  • Kode sumber baru: Kode sumber MithrilDB telah dilisensikan secara independen dari LMDB, dan proyek itu sendiri direncanakan untuk diterbitkan di bawah lisensi yang berbeda (disetujui oleh ATAU JIKA lisensi Apache 2.0Dan tidak Yayasan OpenLDAP).
  • Pemisahan ini menghindari potensi kebingungan, memberikan lebih banyak kepastian, dan memastikan bahwa proyek memiliki jalur yang independen ke depannya.

MithrilDB, seperti MDBX, juga didasarkan pada pohon B+ dan juga akan menampilkan kinerja yang sangat tinggi, sekaligus menghilangkan sejumlah kelemahan mendasar dari MDBX dan LMDB. Secara khusus, masalah “pembacaan panjang”, yang memanifestasikan dirinya sebagai “pembengkakan” database karena fakta bahwa pemrosesan sampah diblokir oleh transaksi pembacaan yang panjang, akan dihilangkan. Fitur MithrilDB baru meliputi:

  • dukungan untuk menempatkan database pada beberapa media heterogen: HDD, SSD dan memori non-volatile.
  • strategi optimal untuk data “berharga” dan “bernilai rendah”, untuk data “panas”, “hangat”, dan “dingin”.
  • menggunakan pohon Merkle untuk memantau integritas database.
  • penggunaan WAL opsional dan kinerja yang jauh lebih tinggi dalam skenario intensif penulisan dan jaminan integritas data.
  • Fiksasi data yang lambat pada disk.

Sumber: linux.org.ru

Tambah komentar