Setelah lima tahun pengembangan, kandidat rilis libmdbx 1.0 kedua telah diterbitkan

Tersedia untuk menguji kandidat kedua untuk rilis perpustakaan libmdbx dengan penerapan database nilai kunci tertanam yang berkinerja tinggi dan ringkas. Versi saat ini (0.5) adalah rilis teknis, menandai selesainya setiap perbaikan dan transisi ke fase pengujian dan stabilisasi akhir publik, dengan pembentukan selanjutnya dari rilis penuh pertama perpustakaan. kode libmdbx didistribusikan oleh dilisensikan di bawah Lisensi Publik OpenLDAP.

Pustaka MDBX adalah percabangan yang direvisi secara signifikan LMDB — DBMS tertanam transaksional dari kelas “nilai kunci” berdasarkan pohon B+ tanpa pencatatan proaktif, yang memungkinkan proses multi-utas bekerja secara kompetitif dan efisien dengan database yang dibagikan secara lokal (bukan jaringan). Pada gilirannya, MDBX lebih cepat dan lebih dapat diandalkan dibandingkan LMDB, dan pada saat yang sama mempertahankan semua fitur utama dari pendahulunya, seperti ACID dan pembacaan non-pemblokiran dengan penskalaan linier di seluruh inti CPU.

Perbedaan paling penting antara MDBX dan LMDB:

  • 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 volume 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 yang dibuat pada Agustus 2019 untuk memisahkan proyek MDBX dan MithrilDB. 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 macOS dan platform tingkat 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.
  • Memperbarui Deskripsi API.
  • Penggabungan (amalgamasi) 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.0, bukan Lisensi Publik OpenLDAP).
  • Pemisahan ini menghindari potensi kebingungan, memberikan lebih banyak kepastian, dan memastikan jalur proyek yang independen.

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 peningkatan kinerja secara signifikan dalam skenario intensif penulisan dengan jaminan integritas data.
  • Pengejaran yang malas dalam memasukkan data ke disk.

Sumber: opennet.ru

Tambah komentar