{"id":103715,"date":"2022-04-05T15:36:50","date_gmt":"2022-04-05T13:36:50","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/vypusk-ferretdb-0-1-realizaczii-mongodb-na-baze-subd-postgresql"},"modified":"2022-04-05T15:36:50","modified_gmt":"2022-04-05T13:36:50","slug":"vypusk-ferretdb-0-1-realizaczii-mongodb-na-baze-subd-postgresql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/news\/vypusk-ferretdb-0-1-realizaczii-mongodb-na-baze-subd-postgresql","title":{"rendered":"Vyd\u00e1n\u00ed FerretDB 0.1, realizace MongoDB na b\u00e1zi datab\u00e1zov\u00e9ho syst\u00e9mu PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Byl zve\u0159ejn\u011bn nov\u00fd projekt FerretDB 0.1 (d\u0159\u00edve MangoDB), kter\u00fd umo\u017e\u0148uje nahradit dokumentov\u011b orientovanou datab\u00e1zi MongoDB PostgreSQL bez pot\u0159eby m\u011bnit k\u00f3d aplikac\u00ed. FerretDB je realizov\u00e1n jako proxy server, kter\u00fd p\u0159ekl\u00e1d\u00e1 dotazy na MangoDB do SQL dotaz\u016f na PostgreSQL, co\u017e umo\u017e\u0148uje pou\u017e\u00edvat PostgreSQL jako skute\u010dn\u00e9 \u00falo\u017ei\u0161t\u011b. K\u00f3d je naps\u00e1n v jazyce Go a je \u0161\u00ed\u0159en pod licenc\u00ed Apache 2.0.        <\/p>\n<p>Pot\u0159eba migrace m\u016f\u017ee vzniknout v d\u016fsledku p\u0159echodu MongoDB na neotev\u0159enou licenci SSPL, kter\u00e1 je zalo\u017eena na licenci AGPLv3, ale nen\u00ed otev\u0159en\u00e1, proto\u017ee obsahuje diskrimina\u010dn\u00ed po\u017eadavek poskytov\u00e1n\u00ed nejen k\u00f3du samotn\u00e9 aplikace, ale tak\u00e9 zdrojov\u00fdch text\u016f v\u0161ech komponent zapojen\u00fdch do poskytov\u00e1n\u00ed cloudov\u00e9 slu\u017eby pod licenc\u00ed SSPL.     <\/p>\n<p>C\u00edlovou skupinou FerretDB jsou u\u017eivatel\u00e9, kte\u0159\u00ed ve sv\u00fdch aplikac\u00edch nevyu\u017e\u00edvaj\u00ed pokro\u010dil\u00e9 funkce MongoDB, ale cht\u011bj\u00ed pou\u017e\u00edvat zcela otev\u0159en\u00fd software. V sou\u010dasn\u00e9 f\u00e1zi v\u00fdvoje FerretDB podporuje pouze \u010d\u00e1st funkc\u00ed MongoDB, kter\u00e9 jsou nej\u010dast\u011bji pou\u017e\u00edv\u00e1ny v b\u011b\u017en\u00fdch aplikac\u00edch. V budoucnu pl\u00e1nuj\u00ed dos\u00e1hnout pln\u00e9 kompatibility s ovlada\u010di pro MongoDB a umo\u017enit pou\u017e\u00edvat FerretDB jako transparentn\u00ed n\u00e1hradu MongoDB.      <\/p>\n<p>P\u0159ipome\u0148me, \u017ee MongoDB se nach\u00e1z\u00ed v meze\u0159e mezi rychl\u00fdmi a \u0161k\u00e1lovateln\u00fdmi syst\u00e9my, kter\u00e9 operuj\u00ed s daty ve form\u00e1tu kl\u00ed\u010d\/hodnota, a rela\u010dn\u00edmi datab\u00e1zov\u00fdmi syst\u00e9my, kter\u00e9 jsou funk\u010dn\u00ed a pohodln\u00e9 p\u0159i vytv\u00e1\u0159en\u00ed dotaz\u016f. MongoDB podporuje ukl\u00e1d\u00e1n\u00ed dokument\u016f v JSON podobn\u00e9m form\u00e1tu, m\u00e1 dostate\u010dn\u011b flexibiln\u00ed jazyk pro vytv\u00e1\u0159en\u00ed dotaz\u016f, m\u016f\u017ee vytv\u00e1\u0159et indexy pro r\u016fzn\u00e9 ukl\u00e1dan\u00e9 atributy, efektivn\u011b zaji\u0161\u0165uje ukl\u00e1d\u00e1n\u00ed velk\u00fdch bin\u00e1rn\u00edch objekt\u016f, podporuje logov\u00e1n\u00ed operac\u00ed p\u0159i zm\u011bn\u011b a p\u0159id\u00e1v\u00e1n\u00ed dat do datab\u00e1ze, m\u016f\u017ee fungovat podle paradigmatu Map\/Reduce, podporuje replikaci a budov\u00e1n\u00ed odoln\u00fdch konfigurac\u00ed.     <\/p>\n<p>Ve verzi FerretDB 0.1.0 byl kompletn\u011b p\u0159epracov\u00e1n postup pro extrakci dat z PostgreSQL. D\u0159\u00edve byl pro ka\u017ed\u00fd p\u0159\u00edchoz\u00ed dotaz MongoDB generov\u00e1n jeden SQL dotaz na PostgreSQL, kter\u00fd vyu\u017e\u00edval funkce pro pr\u00e1ci s form\u00e1tem JSON a prov\u00e1d\u011bl filtrov\u00e1n\u00ed v\u00fdsledk\u016f na stran\u011b PostgreSQL. Z d\u016fvodu rozd\u00edl\u016f v semantice json-funkc\u00ed PostgreSQL a MongoDB bylo pozorov\u00e1no nesoulad v chov\u00e1n\u00ed p\u0159i porovn\u00e1v\u00e1n\u00ed a \u0159azen\u00ed r\u016fzn\u00fdch typ\u016f. Pro vy\u0159e\u0161en\u00ed tohoto probl\u00e9mu se nyn\u00ed z PostgreSQL extrahuje nadbyte\u010dn\u00e1 mno\u017eina dat a filtrov\u00e1n\u00ed v\u00fdsledk\u016f se prov\u00e1d\u00ed na stran\u011b FerretDB, co\u017e umo\u017enilo reprodukovat chov\u00e1n\u00ed MongoDB ve v\u011bt\u0161in\u011b situac\u00ed.     <\/p>\n<p>Zv\u00fd\u0161en\u00ed kompatibility m\u011blo za n\u00e1sledek sn\u00ed\u017een\u00ed v\u00fdkonu, kter\u00e9 se v budouc\u00edch verz\u00edch pl\u00e1nuje kompenzovat selektivn\u00edm filtrov\u00e1n\u00edm na stran\u011b FerretDB pouze t\u011bch dotaz\u016f, u kter\u00fdch se pozoruje rozd\u00edl v chov\u00e1n\u00ed. Nap\u0159\u00edklad dotaz \"db.collection.find({_id: 'some-id-value'})\" m\u016f\u017ee b\u00fdt zcela zpracov\u00e1n v PostgreSQL. Hlavn\u00edm \u00fakolem projektu v t\u00e9to f\u00e1zi v\u00fdvoje je dosa\u017een\u00ed kompatibility s MongoDB, zat\u00edmco v\u00fdkon je zat\u00edm odkl\u00e1d\u00e1n na vedlej\u0161\u00ed kolej. Mezi funk\u010dn\u00edmi zm\u011bnami v nov\u00e9 verzi byla uvedena podpora v\u0161ech bitov\u00fdch oper\u00e1tor\u016f, oper\u00e1toru porovn\u00e1n\u00ed \"$eq\", a tak\u00e9 oper\u00e1tor\u016f \"$elemMatch\" a \"$bitsAllClear\".<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=56971\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u0432\u044b\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FerretDB 0.1 (\u0431\u044b\u0432\u0448\u0438\u0439 MangoDB), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0421\u0423\u0411\u0414 MongoDB \u043d\u0430 PostgreSQL \u0431\u0435\u0437 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. FerretDB \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440, \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a MangoDB \u0432 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a PostgreSQL, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c PostgreSQL \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. \u041a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Go \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 Apache 2.0. \u041f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-103715","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u0432\u044b\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FerretDB 0.1 (\u0431\u044b\u0432\u0448\u0438\u0439 MangoDB), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0421\u0423\u0411\u0414 MongoDB \u043d\u0430 PostgreSQL \u0431\u0435\u0437 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/news\/vypusk-ferretdb-0-1-realizaczii-mongodb-na-baze-subd-postgresql\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0412\u044b\u043f\u0443\u0441\u043a FerretDB 0.1, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 MongoDB \u043d\u0430 \u0431\u0430\u0437\u0435 \u0421\u0423\u0411\u0414 PostgreSQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u0432\u044b\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FerretDB 0.1 (\u0431\u044b\u0432\u0448\u0438\u0439 MangoDB), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0421\u0423\u0411\u0414 MongoDB \u043d\u0430 PostgreSQL \u0431\u0435\u0437 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/news\/vypusk-ferretdb-0-1-realizaczii-mongodb-na-baze-subd-postgresql\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2022-04-05T13:36:50+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2022-04-05T13:36:50+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Vyd\u00e1n\u00ed FerretDB 0.1, implementace MongoDB na b\u00e1zi datab\u00e1ze PostgreSQL | ProHoster","description":"Byla vyd\u00e1na verze projektu FerretDB 0.1 (d\u0159\u00edve MangoDB), kter\u00e1 umo\u017e\u0148uje nahradit dokumentov\u011b orientovanou datab\u00e1zi MongoDB PostgreSQL bez jak\u00fdchkoli zm\u011bn v k\u00f3du aplikac\u00ed.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/news\/vypusk-ferretdb-0-1-realizaczii-mongodb-na-baze-subd-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0412\u044b\u043f\u0443\u0441\u043a FerretDB 0.1, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 MongoDB \u043d\u0430 \u0431\u0430\u0437\u0435 \u0421\u0423\u0411\u0414 PostgreSQL | ProHoster","og:description":"\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u0432\u044b\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FerretDB 0.1 (\u0431\u044b\u0432\u0448\u0438\u0439 MangoDB), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0421\u0423\u0411\u0414 MongoDB \u043d\u0430 PostgreSQL \u0431\u0435\u0437 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","og:url":"https:\/\/prohoster.info\/cs\/blog\/news\/vypusk-ferretdb-0-1-realizaczii-mongodb-na-baze-subd-postgresql","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2022-04-05T13:36:50+00:00","article:modified_time":"2022-04-05T13:36:50+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"103715","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2022-04-05 13:37:13","updated":"2022-10-02 21:35:28","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/103715","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=103715"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/103715\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=103715"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=103715"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=103715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}