{"id":45,"date":"2016-05-24T17:54:04","date_gmt":"2016-05-24T22:24:04","guid":{"rendered":"http:\/\/gabrielguzman.com.ve\/blog\/?p=45"},"modified":"2016-05-24T17:54:04","modified_gmt":"2016-05-24T22:24:04","slug":"bases-de-datos-nosql","status":"publish","type":"post","link":"https:\/\/gabrielguzman.com\/blog\/bases-de-datos-nosql\/","title":{"rendered":"Bases de Datos NoSQL"},"content":{"rendered":"<p style=\"text-align: justify;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 La\u00a0 respuesta\u00a0 a la\u00a0 necesidad\u00a0 de gestionar vol\u00famenes masivos\u00a0 de informaci\u00f3n\u00a0 surge\u00a0 de\u00a0 la\u00a0 base\u00a0 de\u00a0 datos NoSQL,\u00a0 t\u00e9rmino\u00a0 acu\u00f1ado\u00a0 a\u00a0 finales\u00a0 de\u00a0 los\u00a0 90\u00a0 y\u00a0 que\u00a0 engloba\u00a0 todas\u00a0 las\u00a0 tecnolog\u00edas\u00a0 de\u00a0 almacenamiento estructurado que no cumplen el esquema relacional. La\u00a0 cantidad\u00a0 de\u00a0 informaci\u00f3n\u00a0 manejada\u00a0 por\u00a0 comunidades,\u00a0 redes\u00a0 sociales,\u00a0 buscadores,\u00a0 y\u00a0 muchos otros proyectos en el \u00e1mbito de la Web 2.0 es abrumadora, lo que ha hecho que surjan nuevas arquitecturas de almacenamiento de informaci\u00f3n, que deben ser de alto rendimiento, escalables y distribuidas. Aunque esta tecnolog\u00eda surgi\u00f3 de unas necesidades muy concretas, su difusi\u00f3n y algunos proyectos para encapsular\u00a0 sus\u00a0 funcionalidades\u00a0 y\u00a0 hacerlas\u00a0 m\u00e1s\u00a0 amigables\u00a0 a\u00a0 desarrolladores\u00a0 acostumbrados\u00a0 a\u00a0 SQL\u00a0 est\u00e1 provocando que tambi\u00e9n se usen en proyectos de peque\u00f1o tama\u00f1o, con lo que todo indica que a medio plazo\u00a0 convivir\u00e1n\u00a0 con\u00a0 las\u00a0 bases\u00a0 de\u00a0 datos\u00a0 tradicionales\u00a0 independientemente\u00a0 del\u00a0 volumen\u00a0 de\u00a0 datos\u00a0 a gestionar. [1]<\/p>\n<p style=\"text-align: justify;\">Dentro de las plataformas NoSQL encontramos varios grupos:<\/p>\n<p style=\"padding-left: 30px; text-align: justify;\">\u2022 <strong>Basadas en clave\/valor:<\/strong> Se almacenan valores asociados a una clave. Son sencillas y las de mayor rendimiento.<\/p>\n<p style=\"padding-left: 30px; text-align: justify;\">\u2022 <strong>Basadas\u00a0 en\u00a0 documento:<\/strong>\u00a0 Son\u00a0 una\u00a0 particularizaci\u00f3n\u00a0 de\u00a0 las\u00a0 clave\/valor,\u00a0 en\u00a0 las\u00a0 que\u00a0 el\u00a0 valor\u00a0 puedeser un documento. Permiten consultas complejas.<\/p>\n<p style=\"padding-left: 30px; text-align: justify;\">\u2022 <strong>Basadas en columna:<\/strong> Los valores se almacenan en columnas en lugar de filas. Son \u00fatiles cuando se gestionan datos agregados.<\/p>\n<p style=\"padding-left: 30px; text-align: justify;\">\u2022 <strong>Basadas en grafo:<\/strong> Las relaciones se tratan como un dato m\u00e1s.<\/p>\n<p style=\"padding-left: 30px; text-align: justify;\">\u2022 <strong>Basadas\u00a0 en\u00a0 objetos:<\/strong>\u00a0 Los\u00a0 datos\u00a0 son\u00a0 objetos\u00a0 y\u00a0 las\u00a0 relaciones\u00a0 punteros\u00a0 entre\u00a0 ellos.\u00a0 Permiten operaciones muy complejas pero suelen tener bajo rendimiento.<\/p>\n<p style=\"padding-left: 30px; text-align: justify;\">\u2022 <strong>Otras:<\/strong>\u00a0 Cubren\u00a0 necesidades\u00a0 muy\u00a0 espec\u00edficas\u00a0 y\u00a0 tienen\u00a0 escasa\u00a0 implantaci\u00f3n:\u00a0 basadas\u00a0 en\u00a0 tupla, multivaluadas, jer\u00e1rquicas, etc. [2]<\/p>\n<h3 style=\"text-align: justify;\">Desventajas y ventajas de las bases de datos NoSQL<\/h3>\n<p style=\"text-align: justify;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Desde la visi\u00f3n de los adeptos a los RDBMS (<em>Relational Data Base Management System<\/em>) podemos mencionar las siguientes cr\u00edticas a las bases de datos NoSQL: [3]<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>No hay un claro l\u00edder:<\/strong> El mercado de NoSQL est\u00e1 muy fragmentado, lo cual es un\u00a0 problema\u00a0 para\u00a0 el\u00a0 open-source\u00a0 porque\u00a0 se\u00a0 requiere\u00a0 una\u00a0 gran\u00a0 cantidad\u00a0 de desarrolladores para tener \u00e9xito .<\/li>\n<li><strong>Cada\u00a0 una\u00a0 de\u00a0 las\u00a0 bases\u00a0 de\u00a0 datos\u00a0 NoSQL\u00a0 posee\u00a0 su\u00a0 propia\u00a0 interfaz\u00a0 no est\u00e1ndar:<\/strong> La\u00a0 adaptaci\u00f3n\u00a0 a\u00a0 una\u00a0 base\u00a0 de\u00a0 datos\u00a0 NoSQL\u00a0 requiere\u00a0 una\u00a0 inversi\u00f3n significativa para poder ser utilizada. Debido a la especializaci\u00f3n, una compa\u00f1\u00eda podr\u00eda\u00a0 tener\u00a0 que\u00a0 instalar\u00a0 m\u00e1s\u00a0 de\u00a0 una\u00a0 de\u00a0 estas\u00a0 bases\u00a0 de\u00a0 datos.\u00a0 Por\u00a0 ello, algunos\u00a0 describen\u00a0 el\u00a0 mercado\u00a0 NoSQL\u00a0 como\u00a0 monopol\u00edsticamente\u00a0 competitivo (bajas barreras para entrar\u00a0 y salir, muchos peque\u00f1os proveedores con productos t\u00e9cnicamente\u00a0 heterog\u00e9neos\u00a0 y\u00a0 diferenciados,\u00a0 y\u00a0 un\u00a0 mercado\u00a0 inconsistente\u00a0 con\u00a0 las condiciones\u00a0 para\u00a0 la\u00a0 perfecta\u00a0 competencia),\u00a0 donde\u00a0 las\u00a0 empresas NoSQL\u00a0 est\u00e1n condenadas a obtener cero ganancias econ\u00f3micas a largo plazo.<\/li>\n<li><strong>Escalabilidad\u00a0 no\u00a0 tan\u00a0 simple:<\/strong> Una\u00a0 de\u00a0 las\u00a0 caracter\u00edsticas\u00a0 m\u00e1s\u00a0 difundida\u00a0 de\u00a0 las bases\u00a0 de\u00a0 datos\u00a0 NoSQL\u00a0 es\u00a0 su capacidad\u00a0 de\u00a0 escalar horizontalmente.\u00a0 Esta\u00a0 es promovida como\u00a0\u00a0 una\u00a0\u00a0 manera\u00a0\u00a0 de\u00a0\u00a0 manejar\u00a0\u00a0 el\u00a0\u00a0 crecimientoimpredecible\u00a0\u00a0 oexponencial\u00a0 delas\u00a0 necesidades\u00a0 de\u00a0 negocio,\u00a0 pero con\u00a0 frecuencia es\u00a0 m\u00e1s\u00a0 f\u00e1cil decirlo\u00a0 que\u00a0 hacerlo,\u00a0 tal\u00a0 como\u00a0 lo\u00a0 demostraron\u00a0 los\u00a0 problemas\u00a0 de\u00a0 sharding\u00a0 que generaron el apagado en el Foursquare.<\/li>\n<li><strong>Se\u00a0\u00a0 requiere\u00a0\u00a0 una\u00a0\u00a0 reestructuraci\u00f3n\u00a0\u00a0 de\u00a0\u00a0 los\u00a0\u00a0 modelos\u00a0\u00a0 de\u00a0\u00a0 desarrollo\u00a0\u00a0 de aplicaciones:<\/strong> Utilizar\u00a0 una\u00a0 base\u00a0 datos\u00a0 NoSQL\u00a0 t\u00edpicamente\u00a0 implica\u00a0 usar\u00a0 un modelo de desarrollo de aplicaciones diferente a la tradicional arquitectura de 3 capas.\u00a0\u00a0 Por\u00a0\u00a0 lo\u00a0\u00a0 tanto,\u00a0\u00a0 una\u00a0\u00a0 aplicaci\u00f3n\u00a0\u00a0 existente\u00a0\u00a0 de\u00a0\u00a0 3\u00a0\u00a0 capas\u00a0\u00a0 no\u00a0\u00a0 puede\u00a0\u00a0 ser simplemente\u00a0 convertida\u00a0 para\u00a0 bases\u00a0 de\u00a0 datos\u00a0 NoSQL,\u00a0 debe\u00a0 ser\u00a0 reescrita,\u00a0 sin mencionar\u00a0 que\u00a0 no\u00a0 es\u00a0 f\u00e1cil\u00a0 reestructurar los\u00a0 sistemas\u00a0 para\u00a0 que\u00a0 no\u00a0 ejecuten consultas\u00a0 con\u00a0 join\u00a0 o no\u00a0 poder\u00a0 confiar\u00a0 en\u00a0 el\u00a0 modelo\u00a0 de\u00a0 consistencia\u00a0 read-after-write.<\/li>\n<li><strong>Modelos de\u00a0 datos\u00a0 sin\u00a0 esquema\u00a0 podr\u00eda\u00a0 ser\u00a0 una\u00a0 mala\u00a0 decisi\u00f3n\u00a0 de\u00a0 dise\u00f1o:<\/strong> Si bien los modelos de datos sin esquema son flexibles desde el punto de vista del dise\u00f1ador,\u00a0 son\u00a0 dif\u00edciles\u00a0 para\u00a0 consultar\u00a0 sus\u00a0 datos.\u00a0 El\u00a0 modelo\u00a0 Entidad-Atributo-Valor\u00a0 (EAV)\u00a0 funciona\u00a0 bien\u00a0 para\u00a0 consultas\u00a0 clave-valor,\u00a0 pero\u00a0 para\u00a0 consultas\u00a0 de rango o m\u00e1s complejas (por ejemplo para reportes), \u00e9ste esquema es complicado y\u00a0\u00a0\u00a0 lento.\u00a0\u00a0\u00a0 EAV\u00a0\u00a0\u00a0 solo\u00a0\u00a0\u00a0 tiene\u00a0\u00a0\u00a0 sentido\u00a0\u00a0\u00a0 para\u00a0\u00a0\u00a0 esquemas\u00a0\u00a0\u00a0 que\u00a0\u00a0\u00a0 cambian frecuentemente. En\u00a0 los\u00a0 modelos\u00a0 de\u00a0 datos\u00a0 sin\u00a0 esquema,\u00a0 el\u00a0 manejo\u00a0 de\u00a0 los\u00a0 datos\u00a0 es\u00a0 delegado\u00a0 a\u00a0 la capa\u00a0 de\u00a0 aplicaci\u00f3n.\u00a0 Dado\u00a0 que\u00a0 la\u00a0 aplicaci\u00f3n\u00a0 necesita\u00a0 conocer\u00a0 que\u00a0 informaci\u00f3n almacena\u00a0 y\u00a0 como,\u00a0 a\u00a0 medida\u00a0 que\u00a0 evolucionan\u00a0 los\u00a0 datos\u00a0 la\u00a0 aplicaci\u00f3n\u00a0 debe\u00a0 ser capaz de manejar todos los diferentes formatos.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Por\u00a0 otro\u00a0 lado,\u00a0 desde\u00a0 la\u00a0 visi\u00f3n\u00a0 de\u00a0 los\u00a0 adeptos\u00a0 a\u00a0 las\u00a0 bases\u00a0 de\u00a0 datos\u00a0 NoSQL\u00a0 podemos mencionar las siguientes razones para desarrollar y utilizar \u00e9stos almacenamientos: [3]<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>Evitar\u00a0 la\u00a0 complejidad innecesaria:<\/strong> Los\u00a0 RDBMS\u00a0 proveen\u00a0 un\u00a0 conjunto\u00a0 amplio de\u00a0 caracter\u00edsticas\u00a0 y\u00a0 obligan\u00a0 el\u00a0 cumplimiento\u00a0 de\u00a0 las\u00a0 propiedades\u00a0 ACID,\u00a0 sin embargo,\u00a0\u00a0 para\u00a0\u00a0 algunas\u00a0\u00a0 aplicaciones\u00a0\u00a0 \u00e9ste\u00a0\u00a0 set\u00a0\u00a0 podr\u00eda\u00a0\u00a0 ser\u00a0\u00a0 excesivo\u00a0\u00a0 y\u00a0\u00a0 el cumplimiento\u00a0 estricto\u00a0 de\u00a0 las\u00a0 propiedades\u00a0 ACID\u00a0 innecesario.<\/li>\n<li><strong>Alto\u00a0 rendimiento:<\/strong> En\u00a0 la\u00a0 d\u00e9cada\u00a0 de\u00a0 los\u00a0 80\u00a0 las\u00a0 consultas\u00a0 a\u00a0 las\u00a0 bases\u00a0 de\u00a0 datos pod\u00edan\u00a0 correr\u00a0 de\u00a0 noche\u00a0 como\u00a0 procesos\u00a0 batch,\u00a0 hoy\u00a0 d\u00eda\u00a0 esto\u00a0 no\u00a0 es\u00a0 aceptable.\u00a0 Si bien algunas funciones anal\u00edticas pueden ejecutarse de noche, la evoluci\u00f3n de la web\u00a0 requiere\u00a0 respuestas\u00a0 inmediatas\u00a0 a\u00a0 las\u00a0 consultas.\u00a0 Las\u00a0 bases\u00a0 de\u00a0 datos NoSQL proveen un rendimiento mayor a las relacionales, incluso de hasta varios \u00f3rdenes de magnitud: De acuerdo a una presentaci\u00f3n realizada por los ingenieros Avinash Lakshman\u00a0 y Prashant Malik de Facebook, Cassandra puede escribir en un almacenamiento de datos m\u00e1s de 50 GB en solo 0.12 milisegundos, mientras que MySQL tardar\u00eda 300 milisegundos para la mismatarea [4].<\/li>\n<li><strong>Incremento\u00a0 del\u00a0 volumen\u00a0 de\u00a0 informaci\u00f3n\u00a0 no\u00a0 estructurada\u00a0 y\u00a0 empleo\u00a0 de hardware\u00a0 m\u00e1s\u00a0 econ\u00f3mico:<\/strong> En\u00a0 contraste\u00a0 con\u00a0 los\u00a0 RDBMS,\u00a0 la\u00a0 mayor\u00eda\u00a0 de\u00a0 las bases\u00a0 de\u00a0 datos\u00a0 NoSQL\u00a0 son\u00a0 dise\u00f1adas\u00a0 para\u00a0 poder\u00a0 escalar\u00a0 horizontalmente\u00a0 y\u00a0 no tener\u00a0 que\u00a0 confiar\u00a0 en\u00a0 hardware\u00a0 altamente\u00a0 disponible.\u00a0 Las\u00a0 m\u00e1quinas\u00a0 pueden\u00a0 ser agregadas o quitadas sin el esfuerzo operacional que implica realizar sharding en soluciones de cluster de RDBMS.<\/li>\n<li><strong>Evitar\u00a0 el\u00a0 costoso\u00a0 mapeo\u00a0 objeto-relacional: <\/strong>La\u00a0 mayor\u00eda\u00a0 de\u00a0 las\u00a0 bases\u00a0 de\u00a0 datos NoSQL\u00a0 son\u00a0 dise\u00f1adas\u00a0 para\u00a0 almacenar\u00a0 estructuras\u00a0 de\u00a0 datos\u00a0 m\u00e1s\u00a0 simples\u00a0 o\u00a0 m\u00e1s similares a las utilizadas en los lenguajes de programaci\u00f3n orientados a objetos. De\u00a0\u00a0 esta\u00a0\u00a0 forma,\u00a0\u00a0 se\u00a0\u00a0 evita\u00a0\u00a0 costosos\u00a0\u00a0 mapeos\u00a0\u00a0 objeto-relacional,\u00a0\u00a0 beneficiando principalmente\u00a0\u00a0 a\u00a0\u00a0 aplicaciones\u00a0\u00a0 de\u00a0\u00a0 baja\u00a0\u00a0 complejidad\u00a0\u00a0 que\u00a0\u00a0 dif\u00edcilmente\u00a0\u00a0 se benefician de un RDBMS.<\/li>\n<\/ul>\n<h5 style=\"padding-left: 30px; text-align: justify;\">Referencias consultadas:<\/h5>\n<ol>\n<li style=\"text-align: justify;\">\u00a0Gracia del Busto. H.; Yanes Enr\u00edquez, O.: \u00ab<em>Bases de Datos NoSQL<\/em>\u00ab,\u00a0Revista Telem@tica. Vol. 11. No. 3, septiembre-diciembre, 2012. Disponible en <a href=\"http:\/\/revistatelematica.cujae.edu.cu\/index.php\/tele\/article\/view\/74\">http:\/\/revistatelematica.cujae.edu.cu\/index.php\/tele\/article\/view\/74<\/a><\/li>\n<li style=\"text-align: justify;\">Strauch, C: \u201c<em>NoSQL Databases<\/em>\u201d. Disponible en <a href=\"http:\/\/www.christof-strauch.de\/nosqldbs.pdf\">http:\/\/www.christof-strauch.de\/nosqldbs.pdf<\/a><\/li>\n<li style=\"text-align: justify;\">\u00a0Anti\u00f1anco, M.: \u00ab<em>Bases de Datos NoSQL: escalabilidad y alta disponibilidad a trav\u00e9s de patrones de dise\u00f1o<\/em>\u00bb Universidad Nacional de La Plata, 2014. Disponible en <a href=\"http:\/\/hdl.handle.net\/10915\/36338\">http:\/\/hdl.handle.net\/10915\/36338<\/a><\/li>\n<li>Avinash, L.; Prashant, M.: \u00ab<em>Cassandra-Structured Storage System over a P2P Network<\/em>\u00bb 2009. Disponible en\u00a0 <a href=\"http:\/\/static.last.fm\/johan\/nosql-20090611\/cassandra_nosql.pdf\">http:\/\/static.last.fm\/johan\/nosql-20090611\/cassandra_nosql.pdf<\/a><\/li>\n<\/ol>\n<p style=\"padding-left: 30px;\">\n","protected":false},"excerpt":{"rendered":"<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 La\u00a0 respuesta\u00a0 a la\u00a0 necesidad\u00a0 de gestionar vol\u00famenes masivos\u00a0 de informaci\u00f3n\u00a0 surge\u00a0 de\u00a0 la\u00a0 base\u00a0 de\u00a0 datos NoSQL,\u00a0 t\u00e9rmino\u00a0 acu\u00f1ado\u00a0 a\u00a0 finales\u00a0 de\u00a0 los\u00a0 90\u00a0 y\u00a0 que\u00a0 engloba\u00a0 todas\u00a0 las\u00a0 tecnolog\u00edas\u00a0 de\u00a0 almacenamiento estructurado que no cumplen el esquema relacional. La\u00a0 cantidad\u00a0 de\u00a0 informaci\u00f3n\u00a0 manejada\u00a0 por\u00a0 comunidades,\u00a0 redes\u00a0 sociales,\u00a0 buscadores,\u00a0 y\u00a0 muchos otros proyectos &hellip; <a href=\"https:\/\/gabrielguzman.com\/blog\/bases-de-datos-nosql\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Bases de Datos NoSQL<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":48,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[15,13,16],"class_list":["post-45","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tabd","tag-bases-de-datos","tag-databases","tag-nosql"],"_links":{"self":[{"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/posts\/45","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/comments?post=45"}],"version-history":[{"count":3,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions"}],"predecessor-version":[{"id":49,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions\/49"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/media\/48"}],"wp:attachment":[{"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/media?parent=45"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/categories?post=45"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/tags?post=45"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}