Rilis DBMS libmdbx 0.11.7. Pindahkan Pengembangan ke GitFlic Setelah Terkunci di GitHub

Pustaka libmdbx 0.11.7 (MDBX) dirilis dengan implementasi database nilai kunci tertanam yang ringkas dan berkinerja tinggi. Kode libmdbx dilisensikan di bawah Lisensi Publik OpenLDAP. Semua sistem operasi dan arsitektur saat ini didukung, begitu pula Elbrus Rusia 2000.

Rilis ini terkenal karena migrasi proyek ke layanan GitFlic setelah pada tanggal 15 April 2022, administrasi GitHub, tanpa peringatan atau penjelasan apa pun, menghapus libmdbx bersama dengan sejumlah proyek lainnya, sekaligus memblokir akses ke banyak pengembang yang terkait dengan perusahaan yang terkena sanksi AS. Dari sudut pandang pengguna, semua halaman, repositori, dan fork proyek tiba-tiba berubah menjadi halaman 404, tanpa kemungkinan komunikasi apa pun dan mencari tahu alasannya.

Sayangnya, hampir semua terbitan yang didalamnya terdapat banyak pertanyaan dengan jawaban rinci, serta banyak pembahasan, telah hilang. Hilangnya informasi ini adalah satu-satunya kerusakan obyektif yang berhasil ditimbulkan oleh administrasi GitHub pada proyek tersebut. Salinan sebagian dari diskusi tersebut masih tersedia di archive.org.

Hilangnya skenario dan infrastruktur CI yang dibangun (tersedia untuk proyek OpenSource secara gratis) memaksa kami untuk melakukan revisi, penyatuan, dan penghapusan utang teknis berukuran kecil. Kini CI telah dipulihkan ke tingkat yang hampir sama, dengan pengecualian pengujian build dan run untuk semua varian BSD dan Solaris. Biasanya, setelah tindakan tersebut, GitHub tidak menerima klarifikasi atau pemberitahuan apa pun, selain pengingat tentang perlunya pembayaran dan upaya untuk menghapus uang.

Sejak berita terakhir tentang rilis libmdbx v0.11.3, selain pemulihan dari tindakan GitHub, perlu diperhatikan peningkatan dan perbaikan berikut:

  • Menambahkan solusi untuk efek/cacat inkoherensi yang terdeteksi pada halaman gabungan dan cache buffer di kernel Linux. Dalam sistem di mana cache halaman dan buffer benar-benar digabungkan, tidak ada gunanya kernel membuang-buang memori untuk dua salinan data saat menulis ke file yang sudah dipetakan ke dalam memori. Oleh karena itu, data yang sedang ditulis menjadi terlihat melalui pemetaan memori sebelum panggilan sistem write() selesai, meskipun data belum ditulis ke disk.

    Secara umum, perilaku lain tidak rasional, karena dengan penggabungan yang ditangguhkan, Anda masih harus mendapatkan kunci untuk daftar halaman, menyalin data, atau menyesuaikan PTE. Oleh karena itu, aturan koherensi tak terucapkan telah berlaku sejak tahun 1989, ketika cache buffer terpadu muncul di SRV4. Oleh karena itu, mendeteksi kerusakan aneh dalam skenario eksploitasi libmdbx yang dimuat memerlukan banyak pekerjaan. Pertama untuk mereproduksi masalah, kemudian untuk memverifikasi hipotesis dan menguji perbaikan.

    Kini kami dapat dengan yakin mengatakan bahwa permasalahan tersebut telah diidentifikasi, dilokalisasi, dan dihilangkan secara andal, meskipun skenario reproduksinya rumit dan spesifik. Selain itu, pengoperasian mekanisme bypass dikonfirmasi oleh salah satu pengembang Erigon (Ethereum); dalam kasusnya, pada build debug, perlindungan dipicu sebagai regresi karena pemeriksaan penegasan yang tidak perlu.

    Perlu dicatat bahwa dalam konteks meluasnya penggunaan libmdbx dalam proyek produksi, memastikan operasi yang andal pada dasarnya lebih penting daripada mencari tahu apakah itu bug atau fitur dan apakah koherensi tersebut dapat diandalkan, apalagi mencari penyebabnya. penyebab inkoherensi dalam kernel Linux. Oleh karena itu, di sini kita berbicara tentang memperbaiki masalah yang mungkin memengaruhi pengguna.

  • Regresi kesalahan EXDEV (Tautan lintas perangkat) saat menyalin database tanpa pemadatan ke sistem file lain, baik melalui API dan dengan utilitas mdbx_copy, telah dihilangkan.
  • Kris Zyp menerapkan dukungan libmdbx di Deno. Kai Wetlesen merancang kemasan RPM untuk Fedora. David Bouyssié menerapkan pengikatan untuk Scala.
  • Memperbaiki pemrosesan nilai yang ditentukan oleh opsi MDBX_opt_rp_augment_limit saat memproses transaksi besar dalam database besar. Sebelumnya, karena kesalahan, tindakan yang tidak perlu dapat dilakukan, yang terkadang memengaruhi kinerja dalam implementasi Ethereum (Erigon/Akula/Silkworm) dan proyek Binance Chain.
  • Banyak bug yang diperbaiki, termasuk di C++ API. Memperbaiki banyak masalah build dalam konfigurasi langka dan eksotik. Daftar lengkap semua peningkatan signifikan tersedia di ChangeLog.
  • Sebanyak 185 perubahan dilakukan pada 89 file, ≈3300 baris ditambahkan, ≈4100 dihapus. Lebih banyak lagi yang dihapus terutama karena pembersihan file teknologi tidak berguna yang terkait dengan GitHub dan layanan yang bergantung.

Secara historis, libmdbx adalah pengerjaan ulang mendalam dari DBMS LMDB dan lebih unggul dari pendahulunya dalam hal keandalan, rangkaian fitur, dan kinerja. Dibandingkan dengan LMDB, libmdbx lebih menekankan pada kualitas kode, stabilitas API, pengujian, dan pemeriksaan otomatis. Utilitas untuk memeriksa integritas struktur database dengan beberapa kemampuan pemulihan disediakan.

Dari segi teknologi, libmdbx menawarkan ACID, serialisasi perubahan yang kuat, dan pembacaan non-pemblokiran dengan penskalaan linier di seluruh inti CPU. Pemadatan otomatis, manajemen ukuran database otomatis, dan estimasi rentang kueri didukung. Sejak tahun 2016, proyek ini didanai oleh Positive Technologies dan telah digunakan dalam produk-produknya sejak tahun 2017.

libmdbx menawarkan C++ API yang dikembangkan, serta binding yang didukung antusias untuk bahasa Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Sumber: opennet.ru

Tambah komentar