Keluaran FerretDB 0.1, pelaksanaan MongoDB berdasarkan DBMS PostgreSQL

Keluaran projek FerretDB 0.1 (dahulu MangoDB) telah diterbitkan, membolehkan anda menggantikan DBMS MongoDB berorientasikan dokumen dengan PostgreSQL tanpa membuat perubahan pada kod aplikasi. FerretDB dilaksanakan sebagai pelayan proksi yang menterjemahkan panggilan ke MangoDB ke dalam pertanyaan SQL kepada PostgreSQL, membenarkan PostgreSQL digunakan sebagai storan sebenar. Kod ini ditulis dalam Go dan diedarkan di bawah lesen Apache 2.0.

Keperluan untuk penghijrahan mungkin timbul disebabkan oleh peralihan MongoDB kepada lesen SSPL proprietari, yang berdasarkan lesen AGPLv3, tetapi tidak terbuka, kerana ia mengandungi keperluan diskriminasi untuk dihantar di bawah lesen SSPL bukan sahaja kod aplikasi itu sendiri, tetapi juga kod sumber semua komponen yang terlibat dalam perkhidmatan awan peruntukan.

Khalayak sasaran FerretDB ialah pengguna yang tidak menggunakan keupayaan lanjutan MongoDB dalam aplikasi mereka, tetapi mahu menggunakan timbunan perisian terbuka sepenuhnya. Pada peringkat pembangunan semasa, FerretDB masih menyokong sebahagian sahaja daripada keupayaan MongoDB yang paling kerap digunakan dalam aplikasi biasa. Pada masa hadapan, mereka merancang untuk mencapai keserasian penuh dengan pemacu untuk MongoDB dan menyediakan keupayaan untuk menggunakan FerretDB sebagai pengganti telus untuk MongoDB.

Ingat bahawa MongoDB menduduki niche antara sistem pantas dan berskala yang beroperasi pada data dalam format kunci / nilai, dan DBMS hubungan, berfungsi dan mudah dalam menjana pertanyaan. MongoDB menyokong penyimpanan dokumen dalam format seperti JSON, mempunyai bahasa yang agak fleksibel untuk menjana pertanyaan, boleh mencipta indeks untuk pelbagai atribut yang disimpan, menyediakan penyimpanan objek binari yang besar dengan cekap, menyokong pengelogan operasi untuk menukar dan menambah data ke pangkalan data, boleh bekerja mengikut paradigma Map/Reduce, menyokong replikasi dan membina konfigurasi toleran kesalahan.

Keluaran FerretDB 0.1.0 telah mereka bentuk semula sepenuhnya kaedah mendapatkan semula data daripada PostgreSQL. Sebelum ini, untuk setiap permintaan MongoDB yang masuk, satu pertanyaan SQL telah dijana kepada PostgreSQL, menggunakan fungsi untuk bekerja dengan format JSON dan menapis hasil di sebelah PostgreSQL. Disebabkan oleh perbezaan dalam semantik fungsi PostgreSQL dan MongoDB json, terdapat percanggahan dalam tingkah laku semasa membandingkan dan menyusun jenis yang berbeza. Untuk menyelesaikan masalah ini, data kini diambil secara berlebihan daripada PostgreSQL, dan hasilnya ditapis di sebelah FerretDB, yang memungkinkan untuk meniru tingkah laku MongoDB dalam kebanyakan situasi.

Harga peningkatan keserasian adalah penurunan dalam prestasi, yang pada keluaran masa depan mereka jangkakan untuk mengimbangi dengan menapis secara terpilih pada pertanyaan sebelah FerretDB sahaja yang terdapat percanggahan dalam tingkah laku. Contohnya, pertanyaan "db.collection.find({_id: 'some-id-value'})" boleh diproses sepenuhnya dalam PostgreSQL. Matlamat utama projek pada peringkat pembangunan ini adalah untuk mencapai keserasian dengan MongoDB, dan prestasi diturunkan ke latar belakang buat masa ini. Antara perubahan fungsi dalam versi baharu, sokongan untuk semua operator bit, operator perbandingan "$eq", serta operator "$elemMatch" dan "$bitsAllClear" dicatatkan.

Sumber: opennet.ru

Tambah komen