Rilis FerretDB 0.1, implementasi MongoDB berdasarkan DBMS PostgreSQL

Rilis proyek FerretDB 0.1 (sebelumnya MangoDB) telah dipublikasikan, memungkinkan Anda mengganti DBMS MongoDB berorientasi dokumen dengan PostgreSQL tanpa membuat perubahan pada kode aplikasi. FerretDB diimplementasikan sebagai server proksi yang menerjemahkan panggilan ke MangoDB menjadi kueri SQL ke PostgreSQL, sehingga PostgreSQL dapat digunakan sebagai penyimpanan sebenarnya. Kode ini ditulis dalam Go dan didistribusikan di bawah lisensi Apache 2.0.

Kebutuhan untuk migrasi mungkin timbul karena transisi MongoDB ke lisensi SSPL berpemilik, yang didasarkan pada lisensi AGPLv3, tetapi tidak terbuka, karena mengandung persyaratan diskriminatif untuk mengirimkan di bawah lisensi SSPL tidak hanya kode aplikasi itu sendiri, tetapi juga kode sumber semua komponen yang terlibat dalam penyediaan layanan cloud.

Target audiens FerretDB adalah pengguna yang tidak menggunakan kemampuan lanjutan MongoDB dalam aplikasi mereka, namun ingin menggunakan tumpukan perangkat lunak yang sepenuhnya terbuka. Pada tahap pengembangan saat ini, FerretDB masih hanya mendukung sebagian dari kemampuan MongoDB yang paling sering digunakan dalam aplikasi umum. Di masa depan, mereka berencana untuk mencapai kompatibilitas penuh dengan driver untuk MongoDB dan menyediakan kemampuan untuk menggunakan FerretDB sebagai pengganti MongoDB yang transparan.

Mari kita ingat bahwa MongoDB menempati ceruk antara sistem yang cepat dan terukur yang mengoperasikan data dalam format kunci/nilai, dan DBMS relasional yang fungsional dan mudah untuk merumuskan kueri. MongoDB mendukung penyimpanan dokumen dalam format mirip JSON, memiliki bahasa yang cukup fleksibel untuk menghasilkan kueri, dapat membuat indeks untuk berbagai atribut yang disimpan, secara efisien menyediakan penyimpanan objek biner besar, mendukung pencatatan operasi untuk mengubah dan menambahkan data ke database, dapat bekerja sesuai dengan paradigma Map/Reduce, mendukung replikasi dan konstruksi konfigurasi toleransi kesalahan.

Rilis FerretDB 0.1.0 sepenuhnya mendesain ulang metode pengambilan data dari PostgreSQL. Sebelumnya, untuk setiap permintaan MongoDB yang masuk, satu kueri SQL dibuat ke PostgreSQL, menggunakan fungsi untuk bekerja dengan format JSON dan memfilter hasilnya di sisi PostgreSQL. Karena perbedaan semantik fungsi json PostgreSQL dan MongoDB, terdapat perbedaan perilaku saat membandingkan dan mengurutkan tipe yang berbeda. Untuk mengatasi masalah ini, data sekarang diambil secara berlebihan dari PostgreSQL, dan hasilnya disaring di sisi FerretDB, yang memungkinkan untuk mereplikasi perilaku MongoDB di sebagian besar situasi.

Harga dari peningkatan kompatibilitas adalah penurunan kinerja, yang dalam rilis mendatang mereka harapkan dapat dikompensasi dengan memfilter secara selektif hanya kueri di sisi FerretDB yang memiliki perbedaan perilaku. Misalnya, kueri "db.collection.find({_id: 'some-id-value'})" dapat diproses seluruhnya di PostgreSQL. Tujuan utama proyek pada tahap pengembangan ini adalah untuk mencapai kompatibilitas dengan MongoDB, dan kinerjanya saat ini hanya dikesampingkan. Di antara perubahan fungsional dalam versi baru, dukungan untuk semua operator bit, operator perbandingan β€œ$eq”, serta operator β€œ$elemMatch” dan β€œ$bitsAllClear” dicatat.

Sumber: opennet.ru

Tambah komentar