انتشار پروژه FerretDB 0.1 (MangoDB سابق) منتشر شده است که به شما امکان می دهد بدون ایجاد تغییر در کد برنامه، DBMS MongoDB مبتنی بر سند را با PostgreSQL جایگزین کنید. FerretDB به عنوان یک سرور پروکسی پیاده سازی شده است که تماس های MangoDB را به پرس و جوهای SQL به PostgreSQL ترجمه می کند و به PostgreSQL اجازه می دهد تا به عنوان ذخیره سازی واقعی استفاده شود. کد در Go نوشته شده و تحت مجوز Apache 2.0 توزیع شده است.
نیاز به مهاجرت ممکن است به دلیل انتقال MongoDB به یک مجوز SSPL اختصاصی، که بر اساس مجوز AGPLv3 است، اما باز نیست، به وجود آید، زیرا شامل یک الزام تبعیض آمیز برای ارائه تحت مجوز SSPL نه تنها خود کد برنامه، بلکه همچنین کد منبع تمام اجزای درگیر در ارائه خدمات ابری.
مخاطبان FerretDB کاربرانی هستند که از قابلیت های پیشرفته MongoDB در برنامه های خود استفاده نمی کنند، اما می خواهند از یک پشته نرم افزاری کاملا باز استفاده کنند. در مرحله فعلی توسعه، FerretDB هنوز تنها بخشی از قابلیتهای MongoDB را پشتیبانی میکند که اغلب در برنامههای معمولی استفاده میشوند. در آینده، آنها قصد دارند به سازگاری کامل با درایورهای MongoDB دست یابند و امکان استفاده از FerretDB را به عنوان جایگزینی شفاف برای MongoDB فراهم کنند.
به یاد بیاورید که MongoDB جایگاهی بین سیستمهای سریع و مقیاسپذیر که بر روی دادهها در قالب کلید/مقدار کار میکنند و DBMS رابطهای، کاربردی و راحت در تولید پرسوجوها را اشغال میکند. MongoDB از ذخیره سازی اسناد در قالب JSON مانند پشتیبانی می کند، دارای یک زبان نسبتاً انعطاف پذیر برای ایجاد پرس و جو است، می تواند نمایه هایی برای ویژگی های ذخیره شده مختلف ایجاد کند، به طور موثر ذخیره سازی اشیاء باینری بزرگ را فراهم می کند، از ثبت عملیات برای تغییر و افزودن داده ها به پایگاه داده پشتیبانی می کند. مطابق با پارادایم Map/Reduce کار می کند، از تکرار و ساخت پیکربندی های مقاوم در برابر خطا پشتیبانی می کند.
انتشار FerretDB 0.1.0 روش بازیابی داده ها از PostgreSQL را کاملاً دوباره طراحی کرد. پیش از این، برای هر درخواست MongoDB ورودی، یک پرس و جو SQL برای PostgreSQL ایجاد می شد که از توابعی برای کار با فرمت JSON و فیلتر کردن نتایج در سمت PostgreSQL استفاده می کرد. به دلیل تفاوت در معنای توابع json PostgreSQL و MongoDB، در مقایسه و مرتبسازی انواع مختلف، تفاوتی در رفتار وجود داشت. برای حل این مشکل، دادهها اکنون بهصورت اضافی از PostgreSQL واکشی میشوند و نتیجه در سمت FerretDB فیلتر میشود، که امکان تکرار رفتار MongoDB را در اکثر موقعیتها ممکن میسازد.
قیمت افزایش سازگاری کاهش عملکرد بود، که در نسخههای آینده آنها انتظار دارند که با فیلتر کردن انتخابی در سمت FerretDB فقط جستارهایی را جبران کنند که در آنها تفاوتی در رفتار وجود دارد. به عنوان مثال، پرس و جو "db.collection.find({_id: 'some-id-value'})" را می توان به طور کامل در PostgreSQL پردازش کرد. هدف اولیه پروژه در این مرحله از توسعه، دستیابی به سازگاری با MongoDB است و عملکرد در حال حاضر به پسزمینه کاهش یافته است. در میان تغییرات عملکردی نسخه جدید، پشتیبانی از تمامی عملگرهای بیت، عملگر مقایسه “$eq” و همچنین عملگرهای “$elemMatch” و “$bitsAllClear” ذکر شده است.
منبع: opennet.ru