{"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\/es\/blog\/news\/razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-postgresql","title":{"rendered":"Los desarrolladores de OrioleDB han propuesto mejorar la API para motores alternativos de PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Los desarrolladores de OrioleDB analizaron el estado actual de la API de bajo nivel utilizada para el acceso de extensiones a tablas e \u00edndices en PostgreSQL (API de M\u00e9todo de Acceso a Tabla\/\u00cdndice), y propusieron formas de mejorarlo. Desde la llegada de esta API en PostgreSQL 12, los desarrolladores han tenido la capacidad de crear mecanismos de almacenamiento de datos alternativos. Sin embargo, a pesar de la existencia de esta API y de las conocidas limitaciones del mecanismo de almacenamiento incorporado, todav\u00eda no han surgido motores de almacenamiento transaccionales completamente funcionales que se implementen exclusivamente como extensiones.    <\/p>\n<p>Las funciones m\u00e1s demandadas para los motores de tabla alternativos en PostgreSQL son:  <\/p>\n<ul>\n<li class=\"l\"> Implementaciones alternativas de MVCC, como almacenes basados en registros UNDO.\n<li class=\"l\"> Tablas organizadas por \u00edndice, donde el \u00edndice no es un complemento opcional de la tabla que acelera las consultas, sino que representa la estructura de datos principal en la que se almacenan los datos de la tabla.    <\/ul>\n<p>Los cambios necesarios en la API de Table\/Index AM para admitir implementaciones alternativas de MVCC se consideran a la luz de la extensi\u00f3n OrioleDB, dise\u00f1ada para abordar las limitaciones conocidas del mecanismo de almacenamiento integrado en PostgreSQL. El problema es que para la integraci\u00f3n completa de OrioleDB con PostgreSQL se requieren modificaciones en el c\u00f3digo de PostgreSQL, lo que complica la implementaci\u00f3n del proyecto y subraya la necesidad de modernizar la API actual de Table AM.    <\/p>\n<p>La API de Table AM no impone directamente la forma de implementaci\u00f3n de MVCC. Sin embargo, la API de Table AM y la API de Index AM hacen la siguiente suposici\u00f3n: cada TID (Identificador de Tupla\/Fila) o est\u00e1 indexado por todos los \u00edndices o no est\u00e1 indexado en absoluto. Incluso si la Index AM tiene m\u00faltiples referencias a un mismo TID (por ejemplo, GIN), todas estas referencias deben corresponder al mismo valor indexado.    <center><img decoding=\"async\" alt=\"Los desarrolladores de OrioleDB han propuesto mejorar la API para motores alternativos de PostgreSQL\" src=\"\/wp-content\/uploads\/2025\/04\/a2082618f49d887e6987a73c65091c59.png\" style=\"display:block;margin: 0 auto;\" \/><\/center>      <\/p>\n<p>Este principio ha sido criticado por aumentar el n\u00famero de operaciones de escritura (&#171;write amplification&#187;) &#8212; si se actualiza un atributo indexado, es necesario actualizar cada \u00edndice en la tabla. Para aprovechar completamente las ventajas del registro UNDO o construir otro m\u00e9todo de almacenamiento sin &#171;amplificaci\u00f3n de escritura&#187; (como el m\u00e9todo WARM), es necesario romper esta suposici\u00f3n.  <center><img decoding=\"async\" alt=\"Los desarrolladores de OrioleDB han propuesto mejorar la API para motores alternativos de PostgreSQL\" src=\"\/wp-content\/uploads\/2025\/04\/da5adbec63e0b4c139733c5775b317b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/center>        <\/p>\n<p>La Tabla AM, basada en UNDO, que no violar\u00e1 esta suposici\u00f3n, se asemeja al m\u00e9todo existente HOT (Heap-Only Tuples), excepto que las versiones antiguas de las filas se mantienen en el registro UNDO y no deben caber en la misma p\u00e1gina. Sin embargo, seg\u00fan los autores, esta ventaja no es suficiente para justificar la existencia de una Tabla AM separada.    <\/p>\n<p>Limitaciones pr\u00e1cticas de la API existente:    <\/p>\n<ul>\n<li class=\"l\"> Durante la actualizaci\u00f3n de una fila de tabla, los \u00edndices se actualizan bajo el principio de &#171;todo o nada&#187;.\n<li class=\"l\"> La API Index AM actualmente no permite la eliminaci\u00f3n puntual de ciertos tuplas. Actualmente, las tuplas se pueden eliminar masivamente de los \u00edndices mediante los m\u00e9todos ambulkdelete y amvacuumcleanup. Intentar implementar la eliminaci\u00f3n puntual a trav\u00e9s de esta API llevar\u00eda a una baja eficiencia, ya que la mayor\u00eda de las implementaciones actuales deben escanear todo el \u00edndice. Adem\u00e1s, la API no permite especificar cu\u00e1les de las tuplas que hacen referencia a un mismo TID deben eliminarse. Solo puede eliminar todas ellas.\n<li class=\"l\"> Los \u00edndices actualmente hacen referencia a las filas de la tabla por n\u00famero de bloque (32 bits) y n\u00famero de desplazamiento (16 bits). Y solo 11 bits del n\u00famero de desplazamiento se pueden transmitir de manera segura desde el TID de la tabla a todos los m\u00e9todos de acceso al \u00edndice. En este sentido, las implementaciones alternativas de MVCC pueden requerir almacenar una carga adicional (payload) junto con el TID. Por ejemplo, en OrioleDB se requiere uno o varios bits para implementar \u00edndices de &#171;marcado de eliminaci\u00f3n&#187; o informaci\u00f3n completa de visibilidad.      <\/ul>\n<p>Se han propuesto dos enfoques para superar las limitaciones en la pr\u00e1ctica:  <\/p>\n<ul>\n<p>Enfoque 1: La API Index AM proporciona capacidades para una implementaci\u00f3n alternativa de MVCC.    <\/p>\n<p>Mientras que el Table AM sigue siendo responsable de todos los componentes de MVCC, el Index AM proporciona las capacidades necesarias para una implementaci\u00f3n alternativa de MVCC, a saber: almacenamiento de carga \u00fatil (payload) del usuario junto con el TID, m\u00e9todo de eliminaci\u00f3n puntual e incluso m\u00e9todo de actualizaci\u00f3n puntual (si el TID en el \u00edndice no puede ser cambiado, la carga \u00fatil del usuario &#8211; s\u00ed puede). Adem\u00e1s, dado que es necesario permitir que m\u00faltiples tuplas del \u00edndice hagan referencia al mismo TID, los m\u00e9todos de API utilizados al escanear el \u00edndice tambi\u00e9n necesitan actualizaci\u00f3n.    <\/p>\n<p>Enfoque 2: \u00cdndices que admiten MVCC.    <\/p>\n<p>Una alternativa ser\u00eda permitir que los \u00edndices soporten MVCC. Es decir, el &#171;executor&#187; (o, posiblemente, Table AM) simplemente llama a los m\u00e9todos insert() y delete() en Index AM, mientras que Index AM proporciona la capacidad de escaneo teniendo en cuenta MVCC. Esto simplificar\u00eda significativamente el escaneo utilizando solo \u00edndices (index-only). Incluso todo el Table AM en tal caso podr\u00eda convertirse en una capa intermedia que almacena datos en el \u00edndice.    <\/p>\n<p>El diagrama a continuaci\u00f3n muestra un ejemplo. El valor del \u00edndice 2 se actualiza con la transacci\u00f3n 11 de &#171;A&#187; a &#171;B&#187;. Por lo tanto, el valor &#171;A&#187; se marca como xmax == 11, y el valor &#171;B&#187; se marca como xmin == 11. As\u00ed, se puede escanear el \u00edndice 2 y obtener \u00fanicamente las tuplas visibles de acuerdo con MVCC sin realizar verificaciones de montones (heap). La recolecci\u00f3n de basura del \u00edndice 2 tambi\u00e9n se puede llevar a cabo sin utilizar un mont\u00f3n.    <center><img decoding=\"async\" alt=\"Los desarrolladores de OrioleDB han propuesto mejorar la API para motores alternativos de PostgreSQL\" src=\"\/wp-content\/uploads\/2025\/04\/9103127cc51f83c824c6cdc22135b470.png\" style=\"display:block;margin: 0 auto;\" \/><\/center>  <\/p>\n<p>Al implementar todas las innovaciones mencionadas en la API de los m\u00e9todos de acceso indexados, es poco probable que se logre mejorar todos los \u00edndices para soportar todas las nuevas funcionalidades al mismo tiempo. Es m\u00e1s realista permitir varias implementaciones para un solo m\u00e9todo de acceso de \u00edndice. Por ejemplo, adem\u00e1s del B-tree est\u00e1ndar, la extensi\u00f3n podr\u00e1 implementar un B-tree alternativo que soporte MVCC dentro del \u00edndice y soporte identificadores de registro de longitud variable.    <center><img decoding=\"async\" alt=\"Los desarrolladores de OrioleDB han propuesto mejorar la API para motores alternativos de PostgreSQL\" src=\"\/wp-content\/uploads\/2025\/04\/57e1c15ecdd08f7b8095f464b59523b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/center>    <\/p>\n<p>As\u00ed, se propone revisar no solo la API de Table AM, sino tambi\u00e9n la API de Index AM, que ha servido bien a la comunidad de PostgreSQL a lo largo de los a\u00f1os. Adem\u00e1s, se sugiere dividir Index AM en una capa l\u00f3gica y una capa de implementaci\u00f3n. Esta arquitectura repensada permitir\u00e1 a PostgreSQL soportar diferentes modelos de almacenamiento.<br \/>\n<br \/>Fuente: <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.2 - 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\/es\/blog\/news\/razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-postgresql\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Los desarrolladores de OrioleDB propusieron mejorar la API para motores alternativos de PostgreSQL | ProHoster","description":"Los desarrolladores de OrioleDB analizaron el estado actual de la API de bajo nivel utilizada para el acceso de extensiones a tablas e \u00edndices en PostgreSQL (API Table\/Index Access Method (AM)) y propusieron caminos para mejorarla.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/news\/razrabotchiki-orioledb-predlozhili-uluchshit-api-dlya-alternativnyh-dvizhkov-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/123245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=123245"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/123245\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/123246"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=123245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=123245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=123245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}