Rilis DBMS tertanam berkinerja tinggi libmdbx 0.10

Setelah tiga bulan pengembangan, libmdbx 0.10.0 (MDBX) dirilis, mengimplementasikan database nilai kunci tertanam yang berkinerja tinggi dan ringkas. Kode libmdbx dilisensikan di bawah Lisensi Publik OpenLDAP. libmdbx adalah pengerjaan ulang mendalam dari DBMS LMDB dan, menurut pengembangnya, lebih unggul dari pendahulunya dalam hal keandalan, jangkauan kemampuan, dan kinerja. Dinyatakan bahwa libmdbx hingga 20% lebih cepat daripada LMDB dalam skenario CRUD dan hingga 30% lebih cepat jika kontrol internal dinonaktifkan ke tingkat yang sebanding dengan LMDB saat membangun libmdbx.

Libmdbx menawarkan ACID, serialisasi perubahan yang kuat, dan pembacaan non-pemblokiran yang berskala linier di seluruh inti CPU. Di libmdbx, banyak perhatian diberikan pada kualitas kode, operasi API yang stabil, pengujian dan pemeriksaan otomatis. Mendukung pemadatan otomatis, manajemen ukuran basis data otomatis, format basis data tunggal untuk rakitan 32-bit dan 64-bit, dan estimasi rentang kueri. Utilitas untuk memeriksa integritas struktur database dengan beberapa kemampuan pemulihan disediakan. Sejak tahun 2016, proyek ini didanai oleh Positive Technologies dan telah digunakan dalam produk-produknya sejak tahun 2017, dan sanksi yang dijatuhkan oleh pemerintah AS terhadap Positive Technologies tidak memberikan dampak yang nyata.

Inovasi, peningkatan, dan perbaikan besar yang ditambahkan sejak rilis terakhir:

  • Pengikatan Ruby oleh Mahlon E. Smith dan versi uji coba pengikatan Python oleh Noel Kuntze telah tersedia, dan pengikatan GoLang oleh Alexei Sharov telah diperbarui.
  • Untuk mode β€œMDBX_WRITEMAP”, ketika data database diubah langsung di RAM, β€œtumpahan transparan” dari halaman database yang diubah ke disk diterapkan. Sekarang, setelah setiap operasi selesai, halaman tersebut segera siap sepenuhnya untuk ditulis ke disk dan kernel OS dapat secara mandiri menghapus halaman yang diubah ke disk, dan melakukan transaksi tidak memerlukan modifikasinya. Hasilnya, dalam skenario sibuk dengan RAM yang tidak mencukupi, volume operasi disk dapat dikurangi hingga 2 kali lipat.
  • Menerapkan penggusuran salinan bayangan halaman yang dimodifikasi yang sudah lama tidak digunakan, dengan preferensi untuk penggusuran halaman dengan nilai besar/panjang, yang dalam sebagian besar skenario hanya dimodifikasi satu kali per transaksi. Hasilnya adalah berkurangnya lalu lintas disk dan peningkatan kinerja dalam skenario dengan transaksi yang sangat besar.
  • Mode β€œpintar” untuk memisahkan halaman saat memasukkan kunci telah diterapkan. Sekarang, saat menyisipkan urutan yang diurutkan, halaman secara otomatis terisi penuh, dan dalam kasus lain, pohon menjadi lebih seimbang secara optimal. Hasilnya, rata-rata halaman database terisi lebih optimal dan B-tree lebih seimbang sehingga berdampak positif pada performa.
  • Statistik operasi dengan halaman telah ditambahkan, yang memungkinkan Anda memperkirakan secara akurat biaya modifikasi operasi dengan database.
  • Lebih dari selusin bug dan bug telah diperbaiki, termasuk: masalah pembangunan menggunakan MinGW, penggunaan `std::filesystem::path` di iOS <= 13.0, pembangunan yang menargetkan versi Windows yang lebih lama, dll.
  • Secara total, lebih dari 200 perubahan dilakukan pada 66 file, ~6500 baris ditambahkan, ~4500 dihapus.

Secara terpisah, saya ingin mencatat pilihan proyek Turbo-Get (garpu turbo Go-Ethereum) libmdbx sebagai backend penyimpanan baru, dan juga berterima kasih kepada tim proyek (terutama Alexei Sharov, Artyom Vorotnikov, dan Alexei Akhunov) untuk mereka sangat membantu dalam pengujian dalam skenario kasus penggunaan ekstrem. Secara khusus, cacat pada kontrol baca-depan/caching ditemukan dan dihilangkan, yang menyebabkan penurunan kinerja dalam skenario yang sulit direproduksi dengan database besar.

Sumber: opennet.ru

Tambah komentar