{"id":371,"date":"2019-10-27T10:12:29","date_gmt":"2019-10-27T10:12:29","guid":{"rendered":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/?p=371"},"modified":"2024-07-25T12:00:22","modified_gmt":"2024-07-25T12:00:22","slug":"hadoop-en-hadoop-que-me-conviente-schema-on-write-o-schema-on-read","status":"publish","type":"post","link":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/hadoop-en-hadoop-que-me-conviente-schema-on-write-o-schema-on-read\/","title":{"rendered":"[HADOOP] \u00bfEn Hadoop que me conviente: Schema-on-write o Schema-on-read?"},"content":{"rendered":"\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"305\" src=\"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-content\/uploads\/2019\/10\/diferencia-entre-datos-e-informacion.jpg\" alt=\"\" class=\"wp-image-374\" style=\"width:750px;height:305px\" srcset=\"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-content\/uploads\/2019\/10\/diferencia-entre-datos-e-informacion.jpg 750w, https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-content\/uploads\/2019\/10\/diferencia-entre-datos-e-informacion-300x122.jpg 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure>\n\n\n\n<p class=\"has-very-dark-gray-color has-text-color\" style=\"font-size:18px\">SSupongo que todos vosotros habr\u00e9is experimentado el problema de insertar miles de registros en una base de datos relacional. \u00bfNo?&#8230;Bueno, pues yo s\u00ed. En una base de datos relacional como <a href=\"https:\/\/www.mysql.com\/\"><strong>Mysql <\/strong><\/a>con <a href=\"https:\/\/en.wikipedia.org\/wiki\/InnoDB\"><strong>Innodb<\/strong><\/a>, insertar miles de registros puede llegar a tomar m\u00e1s tiempo del que esperamos, el problema viene determinado porque las bases de datos relacionales utilizan el esquema en escritura [in inglis plis: Schema-on-write].<br><\/p>\n\n\n\n<p class=\"has-very-dark-gray-color has-text-color\" style=\"font-size:18px\">El esquema en escritura, es generalmente utilizado en bases de datos relacionales, tales sistemas requiere que el esquema de los datos sea creado y definido previamente antes de insertar los datos. Eso supone que cuando se cargan, estos han de ser analizados para comprobar si encajan con el esquema de la tabla. \u00bfA cu\u00e1ntos de vosotros os ha pasado que hac\u00e9is una inserci\u00f3n de datos en una tabla y os da error porque un dato, es por ejemplo texto y se esperaba un entero? S\u00ed no os ha pasado, solo puede ser dos cosas, una, no has hecho suficientes inserciones, dos, eres un crack. Esto tiene una desventaja bastante incipiente, y es que podr\u00edamos perder datos al ser rechazados y no controlados.<br><\/p>\n\n\n\n<p class=\"has-very-dark-gray-color has-text-color\" style=\"font-size:18px\">Por otro lado, el esquema en escritura tiene varias ventaja. Las lecturas son r\u00e1pidas y nos permite tener un formato definido, conocimiento c\u00f3mo est\u00e1n organizados los datos.<br><\/p>\n\n\n\n<p class=\"has-very-dark-gray-color has-text-color\" style=\"font-size:18px\">En <a href=\"https:\/\/hadoop.apache.org\/\"><strong>Hadoop<\/strong><\/a>, domina el contexto llamado esquema en lectura, esto significa que los datos est\u00e1n almacenados tal y como llegan, sin procesar, e incluso comprimidos, no tienen formato para nada. A la hora de la inserci\u00f3n es incre\u00edblemente r\u00e1pido. Almacenamos los datos en <a href=\"https:\/\/hadoop.apache.org\/docs\/r1.2.1\/hdfs_user_guide.html#Overview\"><strong>HDFS <\/strong><\/a>y nada m\u00e1s, pero a la hora de la lectura, esto no es tan bueno.<br><\/p>\n\n\n\n<p class=\"has-very-dark-gray-color has-text-color\" style=\"font-size:18px\">Obviamente, utilizar un esquema u otro, depender\u00e1 de la utilizaci\u00f3n del sistema que tengamos. Una aplicaci\u00f3n de gesti\u00f3n, donde la mayor\u00eda de las veces vamos a leer datos, nos conviene tener un esquema de escritura. Por ejemplo utilizar una base de datos <a href=\"https:\/\/www.mysql.com\/\"><strong>Mysql<\/strong><\/a>, <a href=\"https:\/\/www.postgresql.org\/\"><strong>Postgresql<\/strong><\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Microsoft_SQL_Server\"><strong>Sql Server<\/strong><\/a>, <a href=\"https:\/\/www.oracle.com\/database\/\"><strong>Oracle<\/strong><\/a>\u2026 Mientras que si nuestro esquema va a recibir gran cantidad de datos, y despu\u00e9s se leer\u00e1 para hacer estad\u00edsticas o an\u00e1lisis, un esquema en lectura, es la mejor opci\u00f3n. Se cargan los datos en el sistema y despu\u00e9s con un proceso en lotes se puede crear los datos a mostrar.<\/p>\n\n\n\n<p class=\"has-very-dark-gray-color has-text-color\" style=\"font-size:18px\">Nosotros obviamente, al mostrar datos en tiempo real, no nos encaja ninguno de los dos esquemas, es un problema. Para resolver el problema, hab\u00edamos utilizado <a href=\"https:\/\/hive.apache.org\/\"><strong>Hive <\/strong><\/a>con <a href=\"https:\/\/orc.apache.org\/\"><strong>ORC<\/strong><\/a>, o incluso <a href=\"https:\/\/impala.apache.org\/\"><strong>Impala <\/strong><\/a>[en otra entrada, mostrar\u00e9 los diferentes esquemas de datos], pero en <a href=\"https:\/\/orc.apache.org\/\">ORC <\/a>hab\u00eda que cargar los esquemas igual que con Impala, lo que significaba que ten\u00edamos un esquema en escritura, y si fallaba al registrarse el error perd\u00edamos datos.<\/p>\n\n\n\n<p class=\"has-very-dark-gray-color has-text-color\" style=\"font-size:18px\">De esta forma, siguiendo el patr\u00f3n de dise\u00f1o para <a href=\"https:\/\/kafka.apache.org\/\"><strong>Kafka<\/strong><\/a><strong> <\/strong>de procesamiento de datos, generamos diferentes topics de <a href=\"https:\/\/kafka.apache.org\/\"><strong>Kafka<\/strong><\/a><strong> <\/strong>que serv\u00edan para diferenciar los diferentes estados [tiers] de nuestro pipeline de procesamiento. Los datos sin procesar [raw] entraban en el primer tiers, dejando al productor libre de seguir insertando los dem\u00e1s datos, esto nos permit\u00eda entrar datos, ya fueran de csv, json, raw, etc\u2026 no ten\u00edamos ning\u00fan tipo de restricci\u00f3n, y el productor, era bastante eficiente, entrando datos, en los diferentes escenarios, el sistema, procesaba los datos, y finalmente los almacenaba en <a href=\"https:\/\/hive.apache.org\/\"><strong>Hive<\/strong><\/a>, <a href=\"https:\/\/hbase.apache.org\/\"><strong>Hbase<\/strong><\/a>, <a href=\"https:\/\/impala.apache.org\/\"><strong>Impala<\/strong><\/a>, o cualquier otro sistema de almacenamiento de datos. En cada escenario [lo comentar\u00e9 en otra entrada] los datos iban siendo analizados, procesados y finalmente almacenados, y si un dato, llegaba de forma incorrecta, se almacenaba para ser procesado m\u00e1s tarde, y se enviaba un mensaje a nosotros con el fin de conocer qu\u00e9 hacer con esa informaci\u00f3n.<\/p>\n\n\n\n<p class=\"has-very-dark-gray-color has-text-color\" style=\"font-size:18px\">Resumiendo, el schema-on-write es un sistema utilizado por los sistemas de gesti\u00f3n de bases de datos [SGBD] tradicionales, con sus ventajas e inconvenientes. Con los nuevos sistemas de entrada de datos y an\u00e1lisis en tiempo real, estos sistemas quedan relegados por los sistemas que utilizan schema-on-read c\u00f3mo <a href=\"https:\/\/hadoop.apache.org\/\"><strong>Hadoop<\/strong><\/a>, donde se prima la entrada de datos, y con sistemas de computaci\u00f3n, pasar estos datos a formatos legibles, para hacer f\u00e1cil la programaci\u00f3n. Luego, a la hora de evaluar un sistema u otros, debes de tener en cuenta todas las ventajas y desventajas, pues har\u00e1 que tu sistema sea r\u00e1pido y\/o consistente.<br><\/p>\n\n\n\n<p class=\"has-very-dark-gray-color has-text-color\" style=\"font-size:18px\">Si quieres hacerme un comentario, no dudes en seguirme o hacerme un comentario referenci\u00e1ndome a <a href=\"https:\/\/twitter.com\/gatreyu\"><strong>Rafael Piernagorda<\/strong><\/a> en Twitter o a <a href=\"https:\/\/www.linkedin.com\/in\/rafaeldavidpiernagorda\/\"><strong>Rafael Piernagorda<\/strong><\/a> en Linkedin<br><\/p>\n\n\n\n<div class=\"wp-block-ugb-cta ugb-cta ugb-5cf9e12 ugb-cta ugb-cta--v2 ugb-main-block\"><style>.ugb-5cf9e12 .ugb-cta__item{border-radius:12px !important}.ugb-5cf9e12 .ugb-button{border-radius:4px !important}.ugb-5cf9e12 .ugb-button:before{border-radius:4px !important}<\/style><div class=\"ugb-inner-block\"><div class=\"ugb-block-content\"><div class=\"ugb-cta__item ugb--shadow-3\"><h3 class=\"ugb-cta__title\">\u00bfTe gustar\u00ed\u00ada saber c\u00f3mo podr\u00ed\u00ada encajar Hadoop con tu proyecto?  <\/h3><p class=\"ugb-cta__description\"> Contacta con nosotros y te ayudaremos con tu proyecto de Hadoop  <\/p><div class=\"ugb-button-container\"><a class=\"ugb-button ugb-button--size-normal\" href=\"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/#contactUs\" rel=\"\" title=\"\"><span class=\"ugb-button--inner\">Contacta con nosotros<\/span><\/a><\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>SSupongo que todos vosotros habr\u00e9is experimentado el problema de insertar miles de registros en una base de datos relacional. \u00bfNo?&#8230;Bueno, pues yo s\u00ed. En una base de datos relacional como &#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-371","post","type-post","status-publish","format-standard","hentry","category-uncategorized-es"],"featured_image_urls_v2":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":"","onepress-blog-small":"","onepress-small":"","onepress-medium":""},"post_excerpt_stackable_v2":"<p>SSupongo que todos vosotros habr\u00e9is experimentado el problema de insertar miles de registros en una base de datos relacional. \u00bfNo?&#8230;Bueno, pues yo s\u00ed. En una base de datos relacional como Mysql con Innodb, insertar miles de registros puede llegar a tomar m\u00e1s tiempo del que esperamos, el problema viene determinado porque las bases de datos relacionales utilizan el esquema en escritura [in inglis plis: Schema-on-write]. El esquema en escritura, es generalmente utilizado en bases de datos relacionales, tales sistemas requiere que el esquema de los datos sea creado y definido previamente antes de insertar los datos. Eso supone que cuando&hellip;<\/p>\n","category_list_v2":"<a href=\"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/category\/uncategorized-es\/\" rel=\"category tag\">Uncategorized<\/a>","author_info_v2":{"name":"Digital Drimz","url":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/author\/digitaldrimz\/"},"comments_num_v2":"0 comments","_links":{"self":[{"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/posts\/371"}],"collection":[{"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/comments?post=371"}],"version-history":[{"count":7,"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/posts\/371\/revisions"}],"predecessor-version":[{"id":392,"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/posts\/371\/revisions\/392"}],"wp:attachment":[{"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/media?parent=371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/categories?post=371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.digitaldrimz.com\/tusociotecnologico\/wp-json\/wp\/v2\/tags?post=371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}