{"id":18248,"date":"2017-10-10T15:48:08","date_gmt":"2017-10-10T13:48:08","guid":{"rendered":"https:\/\/blog.basetis.com\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/"},"modified":"2024-03-12T13:46:05","modified_gmt":"2024-03-12T11:46:05","slug":"datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse","status":"publish","type":"article_basic","link":"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/","title":{"rendered":"Datastore: una base de datos con pocas ganas de relacionarse"},"content":{"rendered":"<h2>Una breve introducci\u00f3n por el reino de&nbsp;NoSQL<\/h2>\n<p>Hace unos d\u00edas junto a mis compa\u00f1eros&nbsp;(Nelly Yacoub, Jorge Gavidia, Albert Alapont, Javier Salvador, Xavier M\u00e9ndez, Enle Lin)&nbsp;terminamos una auditor\u00eda de base de datos para un cliente. Uno de los motores de bases de datos a estudiar fue Datastore. Este sistema cuenta con grandes ventajas que vamos a compartir en este post.&nbsp;<\/p>\n<p>Muchos de nosotros hemos crecido viendo c\u00f3mo las bases de datos relacionales han dominado el mercado. Ya sea en la universidad o en el trabajo, hemos modelado bases de datos utilizando herramientas como el modelo entidad-relaci\u00f3n, hemos manipulado bases de datos con SQL para realizar consultas que van desde un simple <em>select<\/em> hasta una consulta diab\u00f3lica donde los <em>joins <\/em>son los protagonistas.<\/p>\n<p dir=\"ltr\">Entonces&#8230; \u00bfc\u00f3mo te quedas si te digo que para este post<strong> te olvides<\/strong> de las relaciones entre tablas, los esquemas r\u00edgidos y, sobre todo, que dejes de lado el entra\u00f1able lenguaje SQL? Con esta pregunta acabamos de ver las caracter\u00edsticas de un <strong>sistema NoSQL<\/strong>, pero si no has o\u00eddo hablar de este t\u00e9rmino aqu\u00ed va un peque\u00f1o resumen sin entrar detalles de lo que son las bases de datos NoSQL.<br \/>\n&nbsp;<\/p>\n<h2 dir=\"ltr\">Not only SQL<\/h2>\n<p>NoSQL (not only SQL) es el t\u00e9rmino que se utiliza para agrupar las bases de datos que<strong> no siguen el paradigma relacional<\/strong>. En otras palabras, aquellas bases de datos que no utilizan ni <em>foreign keys <\/em>&nbsp;ni &nbsp;<em>joins <\/em>para relacionar tablas. Estas bases de datos son populares por su gran <strong>escalabilidad <\/strong>y <strong>rendimiento<\/strong>. Sin embargo, como contrapartida carecen de una fuerte consistencia. Dependiendo de c\u00f3mo se organizan los datos en un sistema NoSQL, podemos encontrar <strong>cuatro grupos o tipos<\/strong>: clave-valor, columnar, documental y <em>graph<\/em>.<\/p>\n<p>Las<strong> clave-valor<\/strong> se caracterizan por su sencillez, almacenando los datos (como su nombre indica) en pares identificador y valor, como si de un diccionario se tratara. Dentro este grupo podemos encontrar los motores Redis y Bigtable.<\/p>\n<p dir=\"ltr\">Por otro lado, las <strong>columnares <\/strong>van un paso m\u00e1s all\u00e1 que las clave-valor, ya que agrupan los datos tambi\u00e9n en pares, pero con la ventaja de poder unir columnas, obteniendo as\u00ed un resultado parecido a filas en una tabla. Podemos mencionar a Cassandra y HBase como sistemas columnares.<\/p>\n<p dir=\"ltr\">En cuanto a las <strong>documentales<\/strong>, estas se caracterizan por almacenar los datos en ficheros con un formato de texto simple, como por ejemplo XML o JSON. No cuentan con un esquema fijo, pudiendo tener documentos distintos para a un mismo concepto, por ejemplo un documento con datos diferentes para cada usuario. Podemos encontrar a &nbsp;MongoDB y Datastore como integrantes de este tipo de base de datos.<\/p>\n<p dir=\"ltr\">Finalmente, los <strong><em>graphs<\/em>,&nbsp;<\/strong>como su nombre indica, representan&nbsp;los datos como grafos&nbsp;donde las entidades son los&nbsp;nodos y las relaciones las aristas. Este tipo de base de datos cuenta con un alto rendimiento para grandes vol\u00famenes de datos. Un ejemplo de motor es Neo4j.<br \/>\n&nbsp;<\/p>\n<h2 dir=\"ltr\">Datastore: el ojito derecho de Google<\/h2>\n<p dir=\"ltr\">Datastore es una apuesta de Google en el terreno de las bases de datos NoSQL. Este sistema es del tipo documental, el cual se caracteriza por su gran escalabilidad y disponibilidad. Esta base de datos es <strong>totalmente gestionada<\/strong>, o lo que es lo mismo, nos permite olvidarnos de todo lo relacionado con la infraestructura, pudiendo centrar as\u00ed nuestras energ\u00edas en la creaci\u00f3n y manipulaci\u00f3n de la base de datos.<\/p>\n<p dir=\"ltr\">&nbsp;<\/p>\n<p dir=\"ltr\"><meta charset=\"utf-8\"><\/p>\n<h2 dir=\"ltr\">Objetos en Datastore<\/h2>\n<p dir=\"ltr\">Cuando hablamos de los objetos con los que se trabaja en Datastore, podemos listar los siguientes:<\/p>\n<ul>\n<li dir=\"ltr\">\n<p dir=\"ltr\"><strong>Espacio de nombre.&nbsp;<\/strong>Es la agrupaci\u00f3n de los objetos de la base de datos.<\/p>\n<\/li>\n<li dir=\"ltr\">\n<p dir=\"ltr\"><strong>Tipos.<\/strong>&nbsp;Se utilizan para agrupar documentos, como por ejemplo factura, producto, etc. Podemos decir que son las tablas en una base de datos relacional.<\/p>\n<\/li>\n<li dir=\"ltr\">\n<p dir=\"ltr\"><strong>Entidades y propiedades.<\/strong>&nbsp;Siguiendo con la analog\u00eda de una base de datos relacional, estos vendr\u00edan a ser las filas y columnas.<\/p>\n<\/li>\n<li dir=\"ltr\">\n<p dir=\"ltr\"><strong>\u00cdndices.<\/strong>&nbsp;Cumplen con la misma funci\u00f3n tanto para Datastore como para una base de datos relacional.<\/p>\n<\/li>\n<\/ul>\n<p><meta charset=\"utf-8\"><\/p>\n<p dir=\"ltr\">&nbsp;<\/p>\n<h2 dir=\"ltr\">Modelo de datos<meta charset=\"utf-8\"><\/h2>\n<p dir=\"ltr\">Datastore no cuenta con un esquema fijo ni con relaciones entre tablas, siendo estos factores a tener muy cuenta a la hora de modelar nuestro negocio. Datastore dispone de <strong>dos formas de agrupar los datos<\/strong>: <em>ancestor paths<\/em> y <em>entity groups<\/em>.<\/p>\n<h3 dir=\"ltr\"><strong>Ancestor paths<\/strong><\/h3>\n<p dir=\"ltr\">Permite realizar una jerarqu\u00eda entre entidades, similar a un directorio en un sistema de ficheros. De esta forma una entidad puede tener una relaci\u00f3n padre-hijo con otra entidad, organizando mejor los datos.<meta charset=\"utf-8\"><\/p>\n<p dir=\"ltr\">Se pueden construir \u00e1rboles de entidades, donde aquellas entidades que no tengan ancestros ser\u00e1n entidades ra\u00edz. La <em>key <\/em>que identificar\u00e1 una entidad no ra\u00edz ser\u00e1 una secuencia de pares entre la <em>key <\/em>de sus padres y la suya propia.<\/p>\n<p style=\"text-align:center\"><img decoding=\"async\" alt=\"\" data-delta=\"1\" data-fid=\"1334\" data-media-element=\"1\" src=\"https:\/\/blog.basetis.com\/sites\/default\/files\/captura_5.png\" \/><\/p>\n<p dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><meta charset=\"utf-8\"><\/span><\/span>La imagen es un ejemplo de una jerarqu\u00eda utilizando ancestor path. La entidad Abuelo hace de <em>root entity<\/em>, mientras que la entidad Yo tendr\u00e1 como ancestros las entidades Padre y Abuelo.<\/p>\n<h3 dir=\"ltr\"><strong>Entity groups<\/strong><\/h3>\n<p dir=\"ltr\">Este tipo de relaci\u00f3n tiene como objetivo agrupar varias entidades, teniendo una \u00fanica entidad como padre. Se utiliza para datos altamente relacionadas, facilitando as\u00ed su recuperaci\u00f3n.<\/p>\n<p style=\"text-align:center\"><img decoding=\"async\" alt=\"\" data-delta=\"2\" data-fid=\"1335\" data-media-element=\"1\" src=\"https:\/\/blog.basetis.com\/sites\/default\/files\/factura.png\" \/><\/p>\n<p dir=\"ltr\"><meta charset=\"utf-8\">En la imagen se puede ver la relaci\u00f3n entre factura y l\u00edneas de facturas, clientes y trabajadores. Estas \u00faltimas tendr\u00e1n como identificador su key m\u00e1s la de la factura.<br \/>\n&nbsp;<\/p>\n<h2 dir=\"ltr\"><meta charset=\"utf-8\">Plataforma de gesti\u00f3n<meta charset=\"utf-8\"><\/h2>\n<p dir=\"ltr\">Como se ha mencionado, Datastore es autogestionada por Google, contando con un <em>dashboard <\/em>para manipular y consultar nuestra base de datos. Este <em>dashboard <\/em>se divide en cuatro secciones:<\/p>\n<h3 dir=\"ltr\"><strong>Entidades<\/strong><\/h3>\n<p dir=\"ltr\">Empezando por la pesta\u00f1a de Entidades, se puede consultar mediante la interfaz o por consola: los espacios de nombres, tipos, entidades. Adem\u00e1s se puede aplicar varios filtros para acotar las b\u00fasquedas.<br \/>\n&nbsp;<\/p>\n<p style=\"text-align:center\"><img decoding=\"async\" alt=\"\" data-delta=\"3\" data-fid=\"1336\" data-media-element=\"1\" src=\"https:\/\/blog.basetis.com\/sites\/default\/files\/captura1.png\" \/><\/p>\n<p dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><meta charset=\"utf-8\"><\/span><\/span><\/p>\n<h3 dir=\"ltr\">\n<strong>Panel de control<\/strong><\/h3>\n<p dir=\"ltr\">En la pesta\u00f1a del panel de control se nos muestran estad\u00edsticas del estado de nuestra base de datos, el tama\u00f1o de los datos, \u00edndices, etc. Este panel se actualiza cada 24 a 48.<br \/>\n&nbsp;<\/p>\n<p style=\"text-align:center\"><img decoding=\"async\" alt=\"\" data-delta=\"4\" data-fid=\"1337\" data-media-element=\"1\" src=\"https:\/\/blog.basetis.com\/sites\/default\/files\/captura2.png\" \/><\/p>\n<h3 dir=\"ltr\">\n<strong>\u00cdndices<\/strong><\/h3>\n<p dir=\"ltr\">En el apartado de \u00cdndices se puede consultar el estado de los \u00edndices compuestos. Estos tienen como objetivo mejorar el rendimiento, aplicar filtros y ordenar los datos. Estos \u00edndices se tienen que crear por consola o a trav\u00e9s de alguna de las librer\u00edas existentes.<br \/>\n&nbsp;<\/p>\n<p style=\"text-align:center\"><img decoding=\"async\" alt=\"\" data-delta=\"5\" data-fid=\"1338\" data-media-element=\"1\" src=\"https:\/\/blog.basetis.com\/sites\/default\/files\/captura3.png\" \/><\/p>\n<h3 dir=\"ltr\"><strong>Administraci\u00f3n<\/strong><\/h3>\n<p dir=\"ltr\">Por \u00faltimo, tenemos la pesta\u00f1a de Administraci\u00f3n con varias opciones:<\/p>\n<ul>\n<li dir=\"ltr\">\n<p dir=\"ltr\"><strong>Abrir Datastore Adm<\/strong>i, donde podemos consultar el estado general de nuestra base de datos.<\/p>\n<\/li>\n<li dir=\"ltr\">\n<p dir=\"ltr\">Realizar i<strong>mportaciones y exportaciones<\/strong> de <em>backups.<\/em><\/p>\n<\/li>\n<li dir=\"ltr\">\n<p dir=\"ltr\"><strong>Eliminar <\/strong>todas la entidades de un tipo.<\/p>\n<\/li>\n<li dir=\"ltr\">\n<p dir=\"ltr\"><strong>Inhabilitar <\/strong>Datastore Admin y la escritura de la BBDD.<\/p>\n<\/li>\n<\/ul>\n<p style=\"text-align:center\"><img decoding=\"async\" alt=\"\" data-delta=\"6\" data-fid=\"1339\" data-media-element=\"1\" src=\"https:\/\/blog.basetis.com\/sites\/default\/files\/captura4.png\" \/><\/p>\n<p class=\"rtecenter\">&nbsp;<\/p>\n<h2><meta charset=\"utf-8\">Limitaciones<meta charset=\"utf-8\"><\/h2>\n<p dir=\"ltr\">Datastore dispone de varias limitaciones que dependen de si las transacciones se realizan desde la API de Datastore o alguna de las librer\u00edas externas. En la siguiente tabla se detallan las &nbsp;limitaciones m\u00e1s significativas:<\/p>\n<p class=\"rtejustify\" dir=\"ltr\">&nbsp;<\/p>\n<p dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><meta charset=\"utf-8\"><\/span><\/span><\/p>\n<table align=\"center\" border=\"1\">\n<colgroup>\n<col \/>\n<col \/>\n<col \/>\n\t<\/colgroup>\n<thead>\n<tr>\n<th scope=\"col\">\n<p class=\"rteleft\" dir=\"ltr\"><strong><span style=\"font-size:16px;\"><span style=\"font-family:Arial;\">L\u00edmites<\/span><\/span><\/strong><\/p>\n<\/th>\n<th scope=\"col\">\n<p class=\"rteright\" dir=\"ltr\"><strong><span style=\"font-size:16px;\"><span style=\"font-family:Arial;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cantidad<\/span><\/span><\/strong><\/p>\n<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">Tama\u00f1o m\u00e1ximo de una petici\u00f3n.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">100 MiB<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">Tama\u00f1o m\u00e1ximo por transacci\u00f3n.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">10 MiB<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">Tama\u00f1o m\u00e1ximo por entidad.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">1MiB<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">N\u00famero m\u00e1ximo de entidades a las que se puede acceder en un <em>entity group <\/em>por transacci\u00f3n.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">25<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">M\u00e1ximo n\u00famero de entidades que se pueden manipular en una operaci\u00f3n de <em>commit <\/em>en Cloud Datastore API.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">500<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">N\u00famero m\u00e1ximo de <em>keys <\/em>que se pueden consultar en una operaci\u00f3n de consulta en Cloud Datastore API.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">1000<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">Tama\u00f1o m\u00e1ximo de una Propiedad \u00edndice de tipo <em>string <\/em>codificado en UTF-8.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">1,5 MiB<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">Tama\u00f1o m\u00e1ximo para una propiedad no indexada.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">1 MiB<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">N\u00famero m\u00e1ximo de \u00edndices compuestos por proyecto.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">200<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"rtejustify\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">N\u00famero m\u00e1ximo de exportaciones concurrentes.<\/span><\/span><\/span><\/p>\n<\/td>\n<td>\n<p class=\"rteright\" dir=\"ltr\"><span style=\"font-family:Arial;\"><span style=\"font-size:14px;\"><span style=\"font-size:12px;\">50<\/span><\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2>\u00bfAplicaremos alg\u00fan d\u00eda una base de datos Datastore en alg\u00fan proyecto?<\/h2>\n<p><meta charset=\"utf-8\"><\/p>\n<p dir=\"ltr\">Despu\u00e9s de realizar la auditor\u00eda, hemo visto&nbsp;las ventajas&nbsp;as\u00ed como los puntos d\u00e9biles de Datastore. Por lo tanto, podemos afirmar que <strong>Datastore es un sistema con mucho potencial<\/strong>, su alto grado de disponibilidad y escalabilidad hace que sea una opci\u00f3n atractiva para aplicaciones de an\u00e1lisis de datos, donde el cambio de esquema y la redundancia de datos est\u00e9n a la orden del d\u00eda.&nbsp;<\/p>\n<p dir=\"ltr\">Sin embargo, <strong>Datastore cuenta con varias limitaciones <\/strong>que hay que tener en cuenta. La falta de consistencia hace de Datastore una opci\u00f3n poco viable, por ejemplo, en&nbsp;aplicaciones de banca. Adem\u00e1s, al contar con un lenguaje poco maduro la manipulaci\u00f3n de la base de datos depender\u00e1 en gran medida de la librer\u00eda que se utilice.<\/p>\n<p dir=\"ltr\">Esta experiencia nos ha ayudado a ampliar nuestra visi\u00f3n sobre las base de datos y el gran potencial que hay detr\u00e1s. Esperamos haber transmitido un poquito de lo que hemos visto durante nuestro peque\u00f1o viaje por Datastore.<\/p>\n<h5 class=\"rteright\" dir=\"ltr\">Foto de cabecera:&nbsp;<a href=\"https:\/\/unsplash.com\/photos\/BlEErEpGdPA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\" target=\"_blank\" rel=\"noopener\">Timothy Paul Smith \/ Unsplash<\/a><\/h5>\n","protected":false},"excerpt":{"rendered":"<p>Una breve introducci\u00f3n por el reino de&nbsp;NoSQL Hace unos d\u00edas junto a mis compa\u00f1eros&nbsp;(Nelly Yacoub, Jorge Gavidia, Albert Alapont, Javier Salvador, Xavier M\u00e9ndez, Enle Lin)&nbsp;terminamos una auditor\u00eda de base de datos para un cliente. Uno de los motores de bases de datos a estudiar fue Datastore. Este sistema cuenta con grandes ventajas que vamos a [&hellip;]<\/p>\n","protected":false},"author":1322,"featured_media":3003,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"","template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1562],"tags":[1884,1755,1883,1813,1721],"etiquetes":[],"categorias":[],"class_list":["post-18248","article_basic","type-article_basic","status-publish","format-standard","has-post-thumbnail","hentry","category-tecnologia","tag-bases-de-datos","tag-empresa","tag-nosql","tag-open","tag-tecnologia"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Datastore: una base de datos con pocas ganas de relacionarse - Basetis<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datastore: una base de datos con pocas ganas de relacionarse - Basetis\" \/>\n<meta property=\"og:description\" content=\"Una breve introducci\u00f3n por el reino de&nbsp;NoSQL Hace unos d\u00edas junto a mis compa\u00f1eros&nbsp;(Nelly Yacoub, Jorge Gavidia, Albert Alapont, Javier Salvador, Xavier M\u00e9ndez, Enle Lin)&nbsp;terminamos una auditor\u00eda de base de datos para un cliente. Uno de los motores de bases de datos a estudiar fue Datastore. Este sistema cuenta con grandes ventajas que vamos a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/\" \/>\n<meta property=\"og:site_name\" content=\"Basetis\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-12T11:46:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.basetis.com\/wp-content\/uploads\/2018\/10\/antisocial.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1\" \/>\n\t<meta property=\"og:image:height\" content=\"1\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/es\\\/article_basic\\\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\\\/\",\"url\":\"https:\\\/\\\/blog.basetis.com\\\/es\\\/article_basic\\\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\\\/\",\"name\":\"Datastore: una base de datos con pocas ganas de relacionarse - Basetis\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/es\\\/article_basic\\\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/es\\\/article_basic\\\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.basetis.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/antisocial.jpg\",\"datePublished\":\"2017-10-10T13:48:08+00:00\",\"dateModified\":\"2024-03-12T11:46:05+00:00\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.basetis.com\\\/es\\\/article_basic\\\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/es\\\/article_basic\\\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.basetis.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/antisocial.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.basetis.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/antisocial.jpg\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/#website\",\"url\":\"https:\\\/\\\/blog.basetis.com\\\/\",\"name\":\"Basetis\",\"description\":\"Testing\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.basetis.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/#organization\",\"name\":\"Basetis\",\"url\":\"https:\\\/\\\/blog.basetis.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.basetis.com\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/blog.basetis.com\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/logo.svg\",\"width\":187,\"height\":29,\"caption\":\"Basetis\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.basetis.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Datastore: una base de datos con pocas ganas de relacionarse - Basetis","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/","og_locale":"es_ES","og_type":"article","og_title":"Datastore: una base de datos con pocas ganas de relacionarse - Basetis","og_description":"Una breve introducci\u00f3n por el reino de&nbsp;NoSQL Hace unos d\u00edas junto a mis compa\u00f1eros&nbsp;(Nelly Yacoub, Jorge Gavidia, Albert Alapont, Javier Salvador, Xavier M\u00e9ndez, Enle Lin)&nbsp;terminamos una auditor\u00eda de base de datos para un cliente. Uno de los motores de bases de datos a estudiar fue Datastore. Este sistema cuenta con grandes ventajas que vamos a [&hellip;]","og_url":"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/","og_site_name":"Basetis","article_modified_time":"2024-03-12T11:46:05+00:00","og_image":[{"url":"https:\/\/blog.basetis.com\/wp-content\/uploads\/2018\/10\/antisocial.jpg","width":1,"height":1,"type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/","url":"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/","name":"Datastore: una base de datos con pocas ganas de relacionarse - Basetis","isPartOf":{"@id":"https:\/\/blog.basetis.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/#primaryimage"},"image":{"@id":"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.basetis.com\/wp-content\/uploads\/2018\/10\/antisocial.jpg","datePublished":"2017-10-10T13:48:08+00:00","dateModified":"2024-03-12T11:46:05+00:00","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blog.basetis.com\/es\/article_basic\/datastore-una-base-de-datos-con-pocas-ganas-de-relacionarse\/#primaryimage","url":"https:\/\/blog.basetis.com\/wp-content\/uploads\/2018\/10\/antisocial.jpg","contentUrl":"https:\/\/blog.basetis.com\/wp-content\/uploads\/2018\/10\/antisocial.jpg"},{"@type":"WebSite","@id":"https:\/\/blog.basetis.com\/#website","url":"https:\/\/blog.basetis.com\/","name":"Basetis","description":"Testing","publisher":{"@id":"https:\/\/blog.basetis.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.basetis.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blog.basetis.com\/#organization","name":"Basetis","url":"https:\/\/blog.basetis.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blog.basetis.com\/#\/schema\/logo\/image\/","url":"https:\/\/blog.basetis.com\/wp-content\/uploads\/2024\/02\/logo.svg","contentUrl":"https:\/\/blog.basetis.com\/wp-content\/uploads\/2024\/02\/logo.svg","width":187,"height":29,"caption":"Basetis"},"image":{"@id":"https:\/\/blog.basetis.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/article_basic\/18248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/article_basic"}],"about":[{"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/types\/article_basic"}],"author":[{"embeddable":true,"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/users\/1322"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/comments?post=18248"}],"version-history":[{"count":1,"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/article_basic\/18248\/revisions"}],"predecessor-version":[{"id":18249,"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/article_basic\/18248\/revisions\/18249"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/media\/3003"}],"wp:attachment":[{"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/media?parent=18248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/categories?post=18248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/tags?post=18248"},{"taxonomy":"etiquetes","embeddable":true,"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/etiquetes?post=18248"},{"taxonomy":"categorias","embeddable":true,"href":"https:\/\/blog.basetis.com\/es\/wp-json\/wp\/v2\/categorias?post=18248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}