Keluaran DBMS terbenam berprestasi tinggi libmdbx 0.10.4 dan libfpta 0.3.9

Pustaka libmdbx 0.10.4 (MDBX) telah dikeluarkan dengan pelaksanaan pangkalan data nilai kunci terbenam padat berprestasi tinggi dan perpustakaan libfpta 0.3.9 (FPTA) yang berkaitan, yang melaksanakan perwakilan jadual data dengan indeks sekunder dan komposit di atas MDBX. Kedua-dua perpustakaan diedarkan di bawah lesen yang diluluskan OSI. Semua sistem pengendalian dan seni bina semasa disokong, serta Elbrus Rusia 2000.

Dari segi sejarah, libmdbx ialah kerja semula yang mendalam bagi LMDB DBMS dan lebih unggul daripada nenek moyangnya dalam kebolehpercayaan, set ciri dan prestasi. Berbanding dengan LMDB, libmdbx memberi banyak penekanan pada kualiti kod, kestabilan API, ujian dan semakan automatik. Utiliti untuk menyemak integriti struktur pangkalan data dengan beberapa keupayaan pemulihan dibekalkan.

Dari segi teknologi, libmdbx menawarkan ACID, siri perubahan yang kuat dan bacaan tanpa sekatan dengan penskalaan linear merentas teras CPU. Auto-pemadatan, pengurusan saiz pangkalan data automatik dan anggaran pertanyaan julat disokong. Sejak 2016, projek telah dibiayai oleh Positive Technologies dan sejak 2017 telah digunakan dalam produknya.

libmdbx menawarkan API C++, serta pengikatan bahasa yang disokong peminat untuk Rust, Haskell, Python, NodeJS, Ruby, Go dan Nim. Untuk libfpta, hanya penerangan API tersedia secara umum dalam bentuk fail pengepala C/C++.

Inovasi utama, penambahbaikan dan pembetulan ditambah sejak berita sebelumnya pada 9 Mei:

  • Mendayakan binaan yang boleh dihasilkan semula.
  • Memperbaiki pepijat yang, dalam keadaan yang sangat jarang berlaku, gelung/pembekuan boleh berlaku semasa transaksi dilakukan. Masalahnya telah dikenal pasti oleh pakar Positive Tecnologies semasa ujian dalaman produk mereka sendiri.
  • Ujian telah dipertingkatkan dan senario ujian telah dikembangkan untuk menyemak semua keadaan bukan isomorfik yang boleh dicapai bagi pepohon halaman dan kandungan GC di dalam pangkalan data.
  • Dalam API C++, "noexcept" tambahan telah ditetapkan, beban tambahan tambahan telah ditambah untuk kaedah "cursor::erase()", pelaksanaan buffer telah dikecualikan daripada penggunaan "std::string" untuk memastikan penjajaran (berkaitan untuk CLANG libstdc++).
  • Regresi dalam algoritma tumpahan halaman kotor (pelepasan terpilih bagi halaman pangkalan data yang diubah) yang ditunjukkan oleh ralat tidak dijangka yang jarang berlaku MDBX_PROBLEM apabila menukar data dalam transaksi besar telah dihapuskan.
  • Ujian berperingkat telah dijalankan dengan penambahan beberapa pemeriksaan untuk memastikan kestabilan sekiranya berlaku kerosakan yang disengajakan pada pangkalan data.
  • Membetulkan amaran kecil UndefinedBehaviorSanitizer dan Imbasan Coverity.
  • Memperbaiki pemeriksaan bendera dalaman "P_DIRTY" yang lapuk dan tidak lagi digunakan dalam halaman bersarang di dalam imej pangkalan data yang dibuat oleh versi perpustakaan yang lebih lama.
  • Dalam skrip CMake, carian untuk komponen pengkompil yang diperlukan untuk LTO (pengoptimuman masa pautan) telah dipertingkatkan.
  • Bilangan maksimum pembaca serentak telah ditingkatkan kepada 32767.
  • Prestasi yang dipertingkatkan apabila menggunakan Valgrind dan AddressSanitizer.
  • Pada Windows, penggunaan rekursif SRW-lock apabila bekerja dalam mod MDBX_NOTLS (tanpa menggunakan storan setempat benang) telah dihapuskan, penjanaan but telah ditetapkan jika masa sistem telah berubah, pengesanan WSL1 dan WSL2 telah dipertingkatkan, dan keupayaan untuk buka pangkalan data pada Pelan 9 yang dipasang melalui DrvFS telah ditambahkan.
  • Secara keseluruhan, lebih daripada 160 perubahan telah dibuat kepada 57 fail, ~5000 baris ditambah, ~2500 telah dipadamkan.

Saya terutamanya ingin mengucapkan terima kasih kepada pasukan projek Erigon (ekosistem Ethereum) atas bantuan mereka dalam menguji senario penggunaan melampau. Adalah penting bahawa dalam tempoh lima bulan sejak keluaran libmdbx v0.10.0, dengan volum pangkalan data 1-2 TB dalam setiap pemasangan Erigon (digunakan pada 7% nod Ethereum), hanya tiga laporan rasuah pangkalan data diterima, kesemuanya yang berlaku disebabkan oleh sebab luaran, dan bukan ralat perisian: dalam dua kes puncanya adalah kegagalan RAM, dalam yang ketiga ralat dalam menetapkan semula data dalam konfigurasi khusus subsistem storan menggunakan BTRFS.

Sumber: opennet.ru

Tambah komen