Нашри FerretDB 0.1, татбиқи MongoDB дар асоси DBMS PostgreSQL

Нашри лоиҳаи 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 монанд дастгирӣ мекунад, дорои забони хеле фасеҳ барои тавлиди дархостҳо, метавонад барои атрибутҳои гуногуни захирашуда индексҳо эҷод кунад, нигоҳдории объектҳои дуии калонро самаранок таъмин кунад, сабти амалиётҳоро барои тағир додан ва илова кардани маълумот ба пойгоҳи додаҳо дастгирӣ мекунад, метавонад мувофиқи парадигмаи Харита/Коҳиш кор кунед, такрорӣ ва сохтани конфигуратсияҳои ба хатогиҳо тобоварро дастгирӣ мекунад.

Нашри FerretDB 0.1.0 усули дарёфти маълумот аз PostgreSQL-ро комилан аз нав тарҳрезӣ кард. Пештар, барои ҳар як дархости воридотии MongoDB, як дархости SQL ба PostgreSQL бо истифода аз функсияҳо барои кор бо формати JSON ва филтр кардани натиҷаҳо дар тарафи PostgreSQL тавлид мешуд. Аз сабаби фарқиятҳо дар семантикаи функсияҳои PostgreSQL ва MongoDB json, ҳангоми муқоиса ва ҷудо кардани намудҳои гуногун дар рафтор номувофиқӣ ба вуҷуд омад. Барои ҳалли ин мушкилот, ҳоло маълумот аз PostgreSQL ба таври зиёдатӣ гирифта мешавад ва натиҷа дар тарафи FerretDB филтр карда мешавад, ки ин имкон дод, ки рафтори MongoDB дар аксари ҳолатҳо такрор карда шавад.

Нархи мутобиқати афзоянда коҳиши иҷроиш буд, ки дар релизҳои оянда онҳо интизоранд, ки тавассути филтркунии интихобӣ дар тарафи FerretDB танҳо дархостҳое, ки дар рафтор ихтилоф вуҷуд дорад, ҷуброн кунанд. Масалан, дархости "db.collection.find({_id: 'some-id-value'})" метавонад пурра дар PostgreSQL коркард карда шавад. Ҳадафи асосии лоиҳа дар ин марҳилаи рушд ноил шудан ба мутобиқат бо MongoDB мебошад ва иҷрои он ҳоло ба замина гузошта шудааст. Дар байни тағйироти функсионалии версияи нав дастгирӣ барои ҳамаи операторҳои бит, оператори муқоисавии “$eq”, инчунин операторҳои “$elemMatch” ва “$bitsAllClear” қайд карда шудааст.

Манбаъ: opennet.ru

Илова Эзоҳ