{"id":1175,"date":"2024-07-31T11:41:36","date_gmt":"2024-07-31T09:41:36","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=1175"},"modified":"2024-07-31T11:41:36","modified_gmt":"2024-07-31T09:41:36","slug":"04-bds-orientadas-a-llave-valor","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/databases\/nosql\/04-bds-orientadas-a-llave-valor\/","title":{"rendered":"04. BDs orientadas a Llave-Valor"},"content":{"rendered":"\n<p>Este tipo de <strong>bases de datos<\/strong> van a almacenar la informaci\u00f3n utilizando pares <strong>llaves-valor<\/strong>. Cada dato se guarda teniendo como identificador la <strong>llave,<\/strong> y almacenando el respectivo valor con el que se identifica. Y para poder extraer un valor hay que hacerlo a trav\u00e9s de su <strong>llave \u00fanica.<\/strong> Es como si cada valor fuera un <strong>ID \u00fanico,<\/strong> como si tuvi\u00e9ramos <strong>tablas<\/strong> de un s\u00f3lo <strong>registro<\/strong> con un s\u00f3lo campo que es el <strong>ID.<\/strong><\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Este modelo no va a tener relaciones ni jerarqu\u00edas complejas, son muy eficientes en t\u00e9rminos de <strong>rendimiento<\/strong> y <strong>escalabilidad.<\/strong> Al no tener esquemas fijos nos permiten con gran flexibilidad almacenar la informaci\u00f3n. Con estos tipos de <strong>bases de datos<\/strong> se pueden hacer los 4 tipos de operaciones b\u00e1sicas <strong>(CRUD).<\/strong> La <strong>velocidad<\/strong> y la <strong>simplicidad<\/strong> son cuestiones prioritarias. Pueden servir para aplicaciones que usan la <strong>cach\u00e9<\/strong> como un sistema de acceso a la informaci\u00f3n, tambi\u00e9n para almacenar <strong>metadatos,<\/strong> para sistemas que utilicen <strong>colas&#8230;<\/strong><\/p>\n\n\n\n<p>Algunos ejms son <strong>Redis, React<\/strong> o <strong>Amazon Dynamo DB.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"http:\/\/www.redsys.es\/\" target=\"_blank\" rel=\"noreferrer noopener\">Redys<\/a><\/h2>\n\n\n\n<p><strong>Redys<\/strong> es una base de datos de alto rendimiento y de almacenamiento en cach\u00e9 en memoria, que se utiliza ampliamente en aplicaciones web y sistemas distribuidos. Su nombre es la abreviaci\u00f3n de <strong>Remove Diccionary Server<\/strong> (<strong>Servidor de Diccionario Remoto<\/strong>).<\/p>\n\n\n\n<p>Algunas de las caracter\u00edsticas son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Almacenamiento en memoria<\/strong>: almacena todos los datos en la memoria principal del <strong>servidor,<\/strong> lo que permite un acceso muy r\u00e1pido de los datos.<\/li>\n\n\n\n<li><strong>Modelos de datos vers\u00e1tiles<\/strong>: <strong>Redis<\/strong> permite una gran cantidad de <strong>estructuras de datos,<\/strong> como cadenas de texto, listas, conjuntos, hash, bitmaps&#8230; lo que permite una mayor flexibilidad en los tipos de datos que se pueden almacenar, y la manipulaci\u00f3n seg\u00fan las necesidades que necesitemos.<\/li>\n\n\n\n<li>Se pueden realizar <strong>operaciones at\u00f3micas,<\/strong> es decir, operaciones del <strong>CRUD.<\/strong><\/li>\n\n\n\n<li>La ejecuci\u00f3n de las consultas se puede hacer de forma concurrente, por lo que la consistencia y la seguridad est\u00e1n aseguradas.<\/li>\n<\/ul>\n\n\n\n<p>Trabajar con <strong>Redis<\/strong> es utilizar la <strong>terminal de l\u00ednea de comandos<\/strong>, En <a href=\"https:\/\/redis.io\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/redis.io<\/a> encontramos toda la parte de la documentaci\u00f3n. Si nos logeamos, nos lleva a una interfaz de administraci\u00f3n donde tenemos una instancia de <strong>Redis<\/strong> ya sea en <strong>AWS, Google Cloud Plattform<\/strong> o <strong>Microsoft Azure,<\/strong> que son los 3 servicios de c\u00f3mputo en la nube m\u00e1s importantes del mundo.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota:<\/strong> el uso de la <strong>terminal<\/strong> es imprescindible si queremos trabajar con este sistema gestor.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Instalar localmente Redis<\/h2>\n\n\n\n<p>Vamos a necesitar 100% la terminal de comandos. Vamos a la p\u00e1gina <a href=\"https:\/\/redis.io,\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/redis.io,<\/a> a la secci\u00f3n <strong>Get Started,<\/strong> y nos muestra las diferentes instalaciones dependiendo del sistema operativo. Para <strong>Mac<\/strong> sugiere hacer la instalaci\u00f3n mediante <strong>Homebrew,<\/strong> que es un <strong>gestor de paquetes<\/strong> para los entornos de <strong>Mac.<\/strong> Para <strong>Windows<\/strong> no hay un ejecutable, propone instalar.<\/p>\n\n\n\n<p>Existe un servicio para poder hacer pruebas, denominado <strong>Upstash,<\/strong> cuya URL es <a href=\"https:\/\/upstash.com\/,\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/upstash.com\/,<\/a> y es una plataforma <strong>SeverLess,<\/strong> que provee servicios para diferentes productos, entre los que se encuentra <strong>Redis.<\/strong> Podemos comenzar con una versi\u00f3n gratuita. Para hacer el ejercicio que viene a continuaci\u00f3n, si no tenemos instalado <strong>Redis<\/strong> en modo local podemos hacernos una cuenta gratuita en este servicio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creando un servicio en la nube de Redis<\/h2>\n\n\n\n<p>Vamos a utilizar la plataforma online de <strong>Upstash,<\/strong> cuya URL es <a href=\"https:\/\/upstash.com,\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/upstash.com,<\/a> crearnos una cuenta, y una vez creada tendremos un panel de control, en el cual existe una opci\u00f3n para crear bases de datos <strong>Redis.<\/strong> Vamos a crear una base de datos nueva denominada <strong>Demo Redis,<\/strong> por ejm, despu\u00e9s elegimos una regi\u00f3n y activamos <strong>SSL,<\/strong> y el servicio crea la <strong>base de datos.<\/strong><\/p>\n\n\n\n<p>Lo siguiente que tenemos que hacer es abrir una terminal en nuestro equipo y copiar el c\u00f3digo que nos ofrece <strong>Upstash<\/strong> una vez hemos creado nuestra base de datos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comandos<\/h2>\n\n\n\n<p>Vamos a trabajar en un caso hipot\u00e9tico para empezar a trabajar con los comandos que vamos a ir viendo.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em>HSET:<\/em><\/strong> Este comando crea o modifica el valor de un campo de tipo hash. Nos sirve tanto para la creaci\u00f3n como para la actualizaci\u00f3n. Un hash es como una colecci\u00f3n. Veamos su sintaxis.<\/li>\n\n\n\n<li><strong><em>LPUSH:<\/em><\/strong> Este comando inserta antes.<\/li>\n\n\n\n<li><strong><em>RPUSH:<\/em><\/strong> Este comando inserta despu\u00e9s.<\/li>\n\n\n\n<li><strong><em>HGETALL:<\/em><\/strong> Muestra todo.<\/li>\n\n\n\n<li><strong><em>HSET:<\/em><\/strong> Modifica contenido<\/li>\n\n\n\n<li><strong><em>DEL:<\/em><\/strong> Borra contenido.<\/li>\n<\/ul>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">-- Crear dos usuarios\nHSET user:1 name \"Francisco\" age 51 location \"Madrid\"\nHSET user:2 name \"Beatriz\" age 35 location \"Madrid\"\n\nLPUSH user:1:post 1001\nLPUSH user:1:post 1002\nLPUSH user:2:post 2001\n\nHSET post:1001 content \"Buenos d\u00edas\" created_ad \"2023-11-04 10:00:00\" likes 10\nHSET post:1001 content \"Buenas tardes\" created_ad \"2023-11-05 10:00:00\" likes 20\n\n-- Crear un tercer usuario\nHSET user3: name \"In\u00e9s\" age 33 location \"Bilbao\"\n\n-- Mostrar el objeto\nHGETALL user:1\nHGET user:1 name\n\n-- Modifica la edad del usuario 2\nHSER user:2 age 75\n\n-- Elimina el usuario 3\nDEL user:3\n\n-- El usuario 1 crea un nuevo post\nLPUSH user:1:post 1003\n\n-- Mostrar la informaci\u00f3n del post 1001\nHGETALL post 1001\n\n-- Modificamos los likes del post 1002\nHSET post:1002 likes 50\n\n-- Eliminamos el post 1003\nDEL post:1003<\/pre>\n\n\n\n<p>Con estos comandos podemos insertar informaci\u00f3n a una <strong>base de datos<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota:<\/strong> desde la opci\u00f3n <strong>Redis CLI<\/strong> podemos lanzar estos <strong>comandos.<\/strong><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Este tipo de bases de datos van a almacenar la informaci\u00f3n utilizando pares llaves-valor. Cada dato se guarda teniendo como [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1165,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1175","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"Este tipo de bases de datos van a almacenar la informaci\u00f3n utilizando pares llaves-valor. Cada dato se guarda teniendo como [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1175"}],"version-history":[{"count":1,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1175\/revisions"}],"predecessor-version":[{"id":1176,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1175\/revisions\/1176"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1165"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}