{"id":123245,"date":"2025-04-02T21:05:07","date_gmt":"2025-04-02T19:05:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-postgresql"},"modified":"2025-04-02T21:05:07","modified_gmt":"2025-04-02T19:05:09","slug":"razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-postgresql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/news\/razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-postgresql","title":{"rendered":"Desenvolvedores do OrioleDB propuseram melhorias na API para mecanismos alternativos do PostgreSQL.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Os desenvolvedores do OrioleDB analisaram o estado atual da API de baixo n\u00edvel utilizada para o acesso de extens\u00f5es a tabelas e \u00edndices no PostgreSQL (API de M\u00e9todo de Acesso a Tabelas\/\u00cdndices) e propuseram maneiras de melhor\u00e1-la. Desde a sua introdu\u00e7\u00e3o no PostgreSQL 12, essa API permite aos desenvolvedores criar mecanismos alternativos de armazenamento de dados. No entanto, apesar de existir essa API e dos conhecidos limites do mecanismo de armazenamento embutido, at\u00e9 agora n\u00e3o surgiram motores de armazenamento transacionais totalmente funcionais implementados exclusivamente como extens\u00f5es.    <\/p>\n<p>As fun\u00e7\u00f5es mais requisitadas para motores de tabela alternativos no PostgreSQL s\u00e3o:  <\/p>\n<ul>\n<li class=\"l\"> Implementa\u00e7\u00f5es alternativas de MVCC, como armazenamento baseado em log UNDO.\n<li class=\"l\"> Tabelas organizadas por \u00edndice, onde o \u00edndice n\u00e3o \u00e9 um complemento opcional \u00e0 tabela que acelera as consultas, mas representa a estrutura de dados principal onde os dados da tabela s\u00e3o armazenados.    <\/ul>\n<p>As mudan\u00e7as necess\u00e1rias na API Table\/Index AM para dar suporte a implementa\u00e7\u00f5es alternativas de MVCC s\u00e3o discutidas com base na extens\u00e3o OrioleDB, criada para abordar as defici\u00eancias conhecidas do mecanismo de armazenamento embutido do PostgreSQL. O problema \u00e9 que, para uma integra\u00e7\u00e3o completa do OrioleDB com o PostgreSQL, s\u00e3o necess\u00e1rias altera\u00e7\u00f5es no c\u00f3digo do PostgreSQL, o que complica a implementa\u00e7\u00e3o do projeto e destaca a necessidade de moderniza\u00e7\u00e3o da API atual do Table AM.    <\/p>\n<p>A API Table AM n\u00e3o imp\u00f5e diretamente a forma de implementa\u00e7\u00e3o do MVCC. No entanto, a API Table AM e a API Index AM fazem a seguinte suposi\u00e7\u00e3o: cada TID (Identificador de Tupla\/Linha) \u00e9 indexado por todos os \u00edndices ou n\u00e3o \u00e9 indexado de forma alguma. Mesmo que a Index AM tenha v\u00e1rias refer\u00eancias a um \u00fanico TID (por exemplo, GIN), todas essas refer\u00eancias devem corresponder ao mesmo valor indexado.    <center><img decoding=\"async\" alt=\"Desenvolvedores do OrioleDB propuseram melhorias na API para mecanismos alternativos do PostgreSQL.\" src=\"\/wp-content\/uploads\/2025\/04\/a2082618f49d887e6987a73c65091c59.png\" style=\"display:block;margin: 0 auto;\" \/><\/center>      <\/p>\n<p>Este princ\u00edpio foi criticado pelo aumento do n\u00famero de opera\u00e7\u00f5es de escrita (\u00abwrite amplification\u00bb) \u2014 se um atributo indexado \u00e9 atualizado, cada \u00edndice na tabela precisa ser atualizado. Para aproveitar plenamente as vantagens do log UNDO ou construir um outro m\u00e9todo de armazenamento sem \u00abamplifica\u00e7\u00e3o de escrita\u00bb (por exemplo, o m\u00e9todo WARM), \u00e9 necess\u00e1rio violar essa suposi\u00e7\u00e3o.  <center><img decoding=\"async\" alt=\"Desenvolvedores do OrioleDB propuseram melhorias na API para mecanismos alternativos do PostgreSQL.\" src=\"\/wp-content\/uploads\/2025\/04\/da5adbec63e0b4c139733c5775b317b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/center>        <\/p>\n<p>A tabela AM baseada em UNDO, que n\u00e3o violar\u00e1 essa suposi\u00e7\u00e3o, \u00e9 semelhante ao m\u00e9todo HOT (Heap-Only Tuples), exceto que as vers\u00f5es antigas das linhas s\u00e3o mantidas no log UNDO e n\u00e3o precisam caber na mesma p\u00e1gina. No entanto, segundo os autores, essa vantagem n\u00e3o \u00e9 suficiente para justificar a exist\u00eancia de uma tabela AM separada.    <\/p>\n<p>Limita\u00e7\u00f5es pr\u00e1ticas da API existente:    <\/p>\n<ul>\n<li class=\"l\"> Durante a atualiza\u00e7\u00e3o de uma linha da tabela, os \u00edndices s\u00e3o atualizados com o princ\u00edpio de \u00abtudo ou nada\u00bb.\n<li class=\"l\"> A API Index AM n\u00e3o possui a capacidade de excluir determinados tuplos de forma pontual. Atualmente, \u00e9 poss\u00edvel excluir tuplos dos \u00edndices em massa atrav\u00e9s dos m\u00e9todos ambulkdelete e amvacuumcleanup. Tentar implementar uma exclus\u00e3o pontual atrav\u00e9s dessa API resultaria em baixa efici\u00eancia, uma vez que a maioria das implementa\u00e7\u00f5es atuais precisaria escanear todo o \u00edndice. Al\u00e9m disso, a API n\u00e3o permite especificar quais dos tuplos que referenciam o mesmo TID devem ser exclu\u00eddos. Ela pode excluir apenas todos eles.\n<li class=\"l\"> Os \u00edndices atualmente referenciam linhas da tabela pelo n\u00famero do bloco (32 bits) e pelo n\u00famero do deslocamento (16 bits). E somente 11 bits do n\u00famero do deslocamento podem ser transmitidos com seguran\u00e7a do TID da tabela para todos os m\u00e9todos de acesso ao \u00edndice. Nesse caso, implementa\u00e7\u00f5es alternativas de MVCC podem precisar armazenar uma carga \u00fatil adicional (payload) junto com o TID. Por exemplo, no OrioleDB, \u00e9 necess\u00e1rio um ou mais bits para implementar os \u00edndices de \u00abmarca\u00e7\u00e3o de dele\u00e7\u00e3o\u00bb ou informa\u00e7\u00f5es completas sobre visibilidade.      <\/ul>\n<p>Foram propostos dois m\u00e9todos para superar as limita\u00e7\u00f5es na pr\u00e1tica:  <\/p>\n<ul>\n<p>Abordagem 1: A API Index AM oferece possibilidades para a implementa\u00e7\u00e3o alternativa de MVCC.    <\/p>\n<p>Enquanto o Table AM continua respons\u00e1vel por todos os componentes do MVCC, o Index AM fornece as capacidades necess\u00e1rias para a implementa\u00e7\u00e3o alternativa do MVCC, a saber: armazenamento de carga \u00fatil personalizada (payload) junto com o TID, m\u00e9todo de exclus\u00e3o pontual e at\u00e9 mesmo m\u00e9todo de atualiza\u00e7\u00e3o pontual (se o TID no \u00edndice n\u00e3o puder ser alterado, a carga \u00fatil personalizada pode). Al\u00e9m disso, como \u00e9 necess\u00e1rio permitir que v\u00e1rias tuplas do \u00edndice se refiram ao mesmo TID, os m\u00e9todos da API usados ao escanear o \u00edndice tamb\u00e9m precisam ser atualizados.    <\/p>\n<p>Abordagem 2: \u00cdndices que suportam MVCC.    <\/p>\n<p>Uma alternativa seria permitir que os \u00edndices suportassem MVCC. Ou seja, o \u00abexecutor\u00bb (ou, possivelmente, o Table AM) simplesmente chama os m\u00e9todos insert() e delete() no Index AM, enquanto o Index AM fornece a capacidade de escaneamento considerando o MVCC. Isso simplificaria significativamente o escaneamento usando apenas \u00edndices (index-only). Mesmo todo o Table AM, nesse caso, poderia se tornar uma camada intermedi\u00e1ria armazenando dados no \u00edndice.    <\/p>\n<p>No diagrama abaixo \u00e9 apresentado um exemplo. O valor do \u00edndice 2 \u00e9 atualizado pela transa\u00e7\u00e3o 11 de &#171;A&#187; para &#171;B&#187;. Portanto, o valor &#171;A&#187; \u00e9 marcado como xmax == 11, e o valor &#171;B&#187; \u00e9 marcado como xmin == 11. Assim, \u00e9 poss\u00edvel escanear o \u00edndice 2 e obter apenas as tuplas vis\u00edveis de acordo com o MVCC sem verifica\u00e7\u00f5es de heap. A coleta de lixo do \u00edndice 2 tamb\u00e9m pode ser realizada sem o uso de heap.    <center><img decoding=\"async\" alt=\"Desenvolvedores do OrioleDB propuseram melhorias na API para mecanismos alternativos do PostgreSQL.\" src=\"\/wp-content\/uploads\/2025\/04\/9103127cc51f83c824c6cdc22135b470.png\" style=\"display:block;margin: 0 auto;\" \/><\/center>  <\/p>\n<p>Ao implementar todas as inova\u00e7\u00f5es listadas na API de m\u00e9todos de acesso a \u00edndices, \u00e9 improv\u00e1vel que seja poss\u00edvel atualizar todos os \u00edndices para suportar todas as novas capacidades simultaneamente. \u00c9 mais realista permitir v\u00e1rias implementa\u00e7\u00f5es para um m\u00e9todo de acesso a \u00edndice. Por exemplo, al\u00e9m do B-tree padr\u00e3o, a extens\u00e3o poder\u00e1 implementar um B-tree alternativo com suporte a MVCC dentro do \u00edndice e suporte a identificadores de registro de comprimento arbitr\u00e1rio.    <center><img decoding=\"async\" alt=\"Desenvolvedores do OrioleDB propuseram melhorias na API para mecanismos alternativos do PostgreSQL.\" src=\"\/wp-content\/uploads\/2025\/04\/57e1c15ecdd08f7b8095f464b59523b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/center>    <\/p>\n<p>Assim, prop\u00f5e-se revisar n\u00e3o apenas a API do Table AM, mas tamb\u00e9m a API do Index AM, que tem servido \u00e0 comunidade PostgreSQL por muitos anos. Al\u00e9m disso, sugere-se dividir o Index AM em uma camada l\u00f3gica e uma camada de implementa\u00e7\u00e3o. Essa arquitetura reimaginada permitir\u00e1 que o PostgreSQL suporte diferentes modelos de armazenamento.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=62991\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 OrioleDB \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e API, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u0432 PostgreSQL (Table\/Index Access Method (AM) API), \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u043f\u0443\u0442\u0438 \u0435\u0433\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f. \u0421 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432 PostgreSQL 12 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e API \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0434\u043d\u0430\u043a\u043e, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u044d\u0442\u043e\u0433\u043e API \u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":123246,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-123245","post","type-post","status-publish","format-standard","has-post-thumbnail","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=\"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 OrioleDB \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e API, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u0432 PostgreSQL (Table\/Index Access Method (AM) API), \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u043f\u0443\u0442\u0438 \u0435\u0433\u043e.\" \/>\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\/pt\/blog\/news\/razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-postgresql\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 OrioleDB \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c API \u0434\u043b\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 PostgreSQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 OrioleDB \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e API, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u0432 PostgreSQL (Table\/Index Access Method (AM) API), \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u043f\u0443\u0442\u0438 \u0435\u0433\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/news\/razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-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=\"2025-04-02T19:05:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-04-02T19:05:09+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\udd47Os desenvolvedores do OrioleDB propuseram melhorias na API para motores alternativos do PostgreSQL | ProHoster","description":"Os desenvolvedores do OrioleDB analisaram o estado atual da API de baixo n\u00edvel, aplicada para o acesso de extens\u00f5es a tabelas e \u00edndices no PostgreSQL (Table\/Index Access Method (AM) API), e propuseram caminhos para isso.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/news\/razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 OrioleDB \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c API \u0434\u043b\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 PostgreSQL | ProHoster","og:description":"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 OrioleDB \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e API, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u0432 PostgreSQL (Table\/Index Access Method (AM) API), \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u043f\u0443\u0442\u0438 \u0435\u0433\u043e.","og:url":"https:\/\/prohoster.info\/pt\/blog\/news\/razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-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":"2025-04-02T19:05:09+00:00","article:modified_time":"2025-04-02T19:05:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"123245","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":"2026-01-23 11:48:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2026-01-23 11:48:19","updated":"2026-01-23 11:48:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/123245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=123245"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/123245\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/123246"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=123245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=123245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=123245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}