{"id":20097,"date":"2024-02-07T07:56:27","date_gmt":"2024-02-07T06:56:27","guid":{"rendered":"https:\/\/complex-systems-ai.com\/?page_id=20097"},"modified":"2024-02-13T07:16:23","modified_gmt":"2024-02-13T06:16:23","slug":"operateurs-relationnels","status":"publish","type":"page","link":"https:\/\/complex-systems-ai.com\/es\/analisis-de-software\/operadores-relacionales\/","title":{"rendered":"2 Ejercicios Corregidos Operadores Relacionales"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"20097\" class=\"elementor elementor-20097\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-97ce9b1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"97ce9b1\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-eb58237\" data-id=\"eb58237\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7f7c1d1 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"7f7c1d1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/complex-systems-ai.com\/es\/analisis-de-software\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">An\u00e1lisis de software<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-6f38c66\" data-id=\"6f38c66\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a9f7f8f elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"a9f7f8f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/complex-systems-ai.com\/es\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Pagina de inicio<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-000b2f9\" data-id=\"000b2f9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6a1791b elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"6a1791b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/fr.wikipedia.org\/wiki\/UML_(informatique)\" target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Wiki<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3edd86e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3edd86e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0006b03\" data-id=\"0006b03\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2d120e1 elementor-widget elementor-widget-heading\" data-id=\"2d120e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenido<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Tabla de contenido alternativo\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Palanca<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/complex-systems-ai.com\/es\/analisis-de-software\/operadores-relacionales\/#Exercices-corriges-sur-les-operateurs-relationnels\" >Ejercicios corregidos sobre operadores relacionales.<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/complex-systems-ai.com\/es\/analisis-de-software\/operadores-relacionales\/#Rappel-de-cours\" >Recordatorio del curso<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/complex-systems-ai.com\/es\/analisis-de-software\/operadores-relacionales\/#Exercice-1\" >Ejercicio 1<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/complex-systems-ai.com\/es\/analisis-de-software\/operadores-relacionales\/#Exercice-2\" >Ejercicio 2<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Exercices-corriges-sur-les-operateurs-relationnels\"><\/span>Ejercicios corregidos sobre operadores relacionales.<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-dfe1dd2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"dfe1dd2\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4c106be\" data-id=\"4c106be\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-87fd4a3 elementor-widget elementor-widget-text-editor\" data-id=\"87fd4a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Esta p\u00e1gina presenta casos de uso para operadores relacionales mediante ejercicios corregidos.<\/p><p><img decoding=\"async\" class=\"aligncenter wp-image-11096 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2020\/09\/cropped-Capture.png\" alt=\"operadores relacionales\" width=\"97\" height=\"97\" title=\"\"><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-debdc4f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"debdc4f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-48e1693\" data-id=\"48e1693\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-dfb44e3 elementor-widget elementor-widget-heading\" data-id=\"dfb44e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Rappel-de-cours\"><\/span>Recordatorio del curso<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-346e10d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"346e10d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-69af9fb\" data-id=\"69af9fb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-598fd55 elementor-widget elementor-widget-text-editor\" data-id=\"598fd55\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Queremos unir dos relaciones R y S (sin clasificar). R es menor que S<\/p><p>|R| = N\u00famero de p\u00e1ginas en el disco de R, ||R|| = N\u00famero de tuplas de R, M = N\u00famero de p\u00e1ginas de memoria disponibles (asumimos que se asignan 3 p\u00e1ginas de memoria para E\/S<\/p><p>Algoritmo de uni\u00f3n de clasificaci\u00f3n y fusi\u00f3n (SMJ)<\/p><table><tbody><tr><td width=\"205\"><p><strong>Condici\u00f3n en la memoria<\/strong><\/p><\/td><td width=\"205\"><p><strong>costo de E\/S<\/strong><\/p><\/td><\/tr><tr><td width=\"205\"><p>METRO &gt; |R|+|S|<\/p><\/td><td width=\"205\"><p>Costo = |R|+|S|<\/p><\/td><\/tr><tr><td width=\"205\"><p>|R|+|S| &gt; M &gt; cuadrado(|R|+|S|)<\/p><\/td><td width=\"205\"><p>Costo = 3|R|+3|S|<\/p><\/td><\/tr><\/tbody><\/table><p>Algoritmo de uni\u00f3n hash de gracia (GHJ)<\/p><table><tbody><tr><td width=\"205\"><p><strong>Condici\u00f3n en la memoria<\/strong><\/p><\/td><td width=\"205\"><p><strong>costo de E\/S<\/strong><\/p><\/td><\/tr><tr><td width=\"205\"><p>METRO &gt; |R|<\/p><\/td><td width=\"205\"><p>Costo = |R|+|S|<\/p><\/td><\/tr><tr><td width=\"205\"><p>M &gt; cuadrado(|R|)<\/p><\/td><td width=\"205\"><p>Costo = 3|R|+3|S|<\/p><\/td><\/tr><\/tbody><\/table>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-86d3bc1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"86d3bc1\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-11b5850\" data-id=\"11b5850\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fad34c4 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"fad34c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1f99c9d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1f99c9d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0cf4697\" data-id=\"0cf4697\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9a8743f elementor-widget elementor-widget-heading\" data-id=\"9a8743f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Exercice-1\"><\/span>Ejercicio 1<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-df7e282 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"df7e282\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-04f72dd\" data-id=\"04f72dd\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ac19626 elementor-widget elementor-widget-text-editor\" data-id=\"ac19626\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Pregunta 1<\/strong><\/p><p>Con base en los algoritmos vistos en clase, encuentre las f\u00f3rmulas de costo as\u00ed como las condiciones l\u00edmite en la memoria (asumiendo que M no incluye 2 o 3 buffers para E\/S).<\/p><p><strong>Pregunta 2<\/strong><\/p><p>Proponer una estrategia de ejecuci\u00f3n para SMJ y GHJ cuando la memoria es menor que sqr(|R|+|S|) (SMJ) o sqr(|R|) (GHJ)<\/p><p><strong>Pregunta 3<\/strong><\/p><p>Suponiendo que leer n p\u00e1ginas consecutivas del disco lleva 10 ms + n*0,2 ms, compare Block Nested Loop Join (BNLJ), GHJ y SMJ. Para el SMJ y el GHJ, nos situamos en el caso de que tengamos una memoria menor que |R|+|S| y que |R| respectivamente.<\/p><p><strong>Pregunta 4<\/strong><\/p><p>Basado en el algoritmo Hybrid Hash Join visto en clase, proponga una estrategia de ejecuci\u00f3n de hash adaptativa que le permita aprovechar la m\u00e1xima memoria disponible pero <strong>sin saber a priori el tama\u00f1o de R <\/strong>(Para simplificar, asumiremos que M &gt; sqr(|R|) y M&lt;|R|). Eval\u00fae el costo de E\/S para M = R\/2, M = R\/3.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9ac751d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9ac751d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b7e897e\" data-id=\"b7e897e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-54ce3e6 elementor-widget elementor-widget-toggle\" data-id=\"54ce3e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-8891\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-8891\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Soluci\u00f3n<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-8891\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-8891\"><p><strong>Pregunta 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>\u00a0\u00a0\u00a0<\/p><p>Con base en los algoritmos vistos en clase, encuentre las f\u00f3rmulas de costo as\u00ed como las condiciones l\u00edmite en la memoria (asumiendo que M no incluye 2 o 3 buffers para E\/S).<\/p><p>SMJ<\/p><ul><li>M&gt; |R|+|S| : Leer R, ordenar R en la memoria seg\u00fan el atributo de uni\u00f3n, lo mismo para S en la memoria, fusionar p\u00e1ginas ordenadas en la memoria. Por lo tanto tenemos |R|+|S| discos de entrada y salida para leer las 2 relaciones. (Nota: la redacci\u00f3n del resultado nunca est\u00e1 incluida en los costes de los operadores).<\/li><li>|R|+|S| &gt; M &gt; sqr(|R|+|S|): Las dos relaciones no se mantienen en la memoria. El algoritmo entonces es el siguiente. Lea R en la memoria en paquetes de M p\u00e1ginas y ordene el paquete en la memoria seg\u00fan el atributo de uni\u00f3n. Este paquete se escribe en disco (llamado cubo en ingl\u00e9s). El proceso se repite |R|\/M veces hasta que todo R se haya consumido y ordenado.\u00a0<\/li><\/ul><p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1.125rem;\">Obtenemos |R|\/M paquetes de tuplas ordenadas de R. El n\u00famero de entradas y salidas es, por tanto, aqu\u00ed 2|R|, para leer R y escribir los paquetes ordenados de R. El mismo proceso se aplica a S, correspondiente a 2|S| entradas salidas. Luego obtenemos |R|\/M+|S|\/M paquetes de tama\u00f1o M. Luego debemos unir las tuplas. Para ello realizamos la fase de fusi\u00f3n. Necesitamos al menos una p\u00e1gina de memoria por paquete. Luego se recupera en la memoria la primera p\u00e1gina de cada paquete. En el resultado se producen tuplas de uni\u00f3n.\u00a0<\/span><\/p><p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1.125rem;\">Cuando sabemos que una p\u00e1gina de un paquete contiene tuplas que ya no se pueden unir, la reemplazamos con la siguiente p\u00e1gina del paquete del que proviene. As\u00ed, se lee cada p\u00e1gina de cada paquete, generando |R|+|S| entradas salidas. La cantidad de dep\u00f3sitos no puede exceder M si queremos poder fusionarnos. La memoria necesaria para realizar este procesamiento es de al menos una p\u00e1gina por paquete. Entonces es necesario que M &gt; |R|\/M+|S|\/M de ah\u00ed el resultado de la tabla.<\/span><\/p><p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-20103 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd52.png\" alt=\"operadores relacionales\" width=\"630\" height=\"383\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd52.png 630w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd52-300x182.png 300w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd52-18x12.png 18w\" sizes=\"(max-width: 630px) 100vw, 630px\" \/><\/p><p>GHJ:<\/p><ul><li>M&gt; |R|+|S| : Leer R en la memoria, aplicar hash a R, leer y aplicar hash a S en la memoria, unir los paquetes hash correspondientes en la memoria. Por lo tanto tenemos |R|+|S| salidas de entrada.<\/li><li>M&gt; sqr(|R|): La relaci\u00f3n R no se mantiene en la memoria. El algoritmo entonces es el siguiente. Leer R en la memoria en paquetes de M y fabricar N paquetes de tuplas de R con hash en el atributo de uni\u00f3n (N es el n\u00famero de valores hash producidos por la funci\u00f3n hash), hasta haber consumido todo R.<\/li><\/ul><p>La cantidad de dep\u00f3sitos de R no puede exceder M para tener al menos una p\u00e1gina de memoria para cada entrada en la tabla hash. Por tanto, el n\u00famero de entradas y salidas es 2|R|. El mismo proceso se aplica a S, generando 2|S| entradas salidas. Para unir las tuplas, debemos leer un paquete hash completo de R en la memoria y pasar p\u00e1gina por p\u00e1gina el paquete hash correspondiente de S. Para conservarlo en la memoria, el paquete hash de R debe ser menor que M. Tenemos m\u00e1s M paquetes y, en promedio, |R|\/M p\u00e1ginas por paquete. La memoria necesaria para realizar este procesamiento es, por tanto, |R|\/M &lt; M, de ah\u00ed el resultado de la tabla.<\/p><p><strong>Pregunta 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/strong>\u00a0\u00a0\u00a0\u00a0<\/p><p>Proponer una estrategia de ejecuci\u00f3n para SMJ y GHJ cuando la memoria es menor que sqr(|R|+|S|) (SMJ) o sqr(|R|) (GHJ)<\/p><p>SMJ: podemos hacer varios niveles de corridas. Luego aumentamos el tama\u00f1o de los paquetes y reducimos su n\u00famero. Esto se puede hacer fusionando varios paquetes de R (hacemos paquetes ordenados m\u00e1s grandes con las tuplas de los paquetes iniciales) y de S mediante clasificaci\u00f3n. Luego obtenemos 3|R|+3|S| E\/S (1 nivel de ejecuci\u00f3n), 5R|+5|S| (2 niveles de carreras), 7|R|+7|S| (3 niveles de carreras).<\/p><p><img decoding=\"async\" class=\"alignnone wp-image-20104 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd53.png\" alt=\"operadores relacionales\" width=\"520\" height=\"357\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd53.png 520w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd53-300x206.png 300w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd53-18x12.png 18w\" sizes=\"(max-width: 520px) 100vw, 520px\" \/><\/p><p>GHJ: Hacemos un hash m\u00e1s fino (otra funci\u00f3n de hash) los paquetes R cuyo tama\u00f1o es mayor que el de la memoria. (Pb: \u00bfdeber\u00edamos repetir tambi\u00e9n S?)<\/p><p><strong>Pregunta 3\u00a0\u00a0<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/p><p>Suponiendo que leer n p\u00e1ginas consecutivas del disco lleva 10 ms + n*0,2 ms, compare Block Nested Loop Join (BNLJ), GHJ y SMJ. Para el SMJ y el GHJ, nos situamos en el caso de que tengamos una memoria menor que |R|+|S| y que |R| respectivamente.<\/p><p>BNLJ: lee un bloque de R y luego pasa todo S p\u00e1gina por p\u00e1gina. Haz esto R\/M veces. Obtenemos por tanto: |R|\/M (10 + M x 0,2ms) + |R|\/M (10ms + |S| x 0,2ms)<\/p><p>SMJ: Obtenemos 2 x |R|\/M (10ms + M x 0,2ms) + 2 x |S|\/M (10ms + M x 0,2ms) + (|R|+|S|) (10ms + 0,2ms ) = lectura\/escritura secuencial por bloques de R y S + lectura aleatoria de p\u00e1ginas de R y S<\/p><p>GHJ: Obtenemos 2 x (|R|+|S|) (10ms + 0.2ms) + |R|\/M (10ms + M x 0.2ms) + |R|\/M (10ms + |S| * M \/ |R| x 0.2ms) = lectura\/escritura aleatoria de p\u00e1ginas de R y S + lectura secuencial de bloques de R y S<\/p><p>Ref: \u201cBuscando la verdad sobre las uniones ad hoc\u201d<\/p><p><strong>Pregunta 4<\/strong><\/p><p>Basado en el algoritmo Hybrid Hash Join visto en clase, proponga una estrategia de ejecuci\u00f3n de hash adaptativa que le permita aprovechar la m\u00e1xima memoria disponible pero <strong>sin saber a priori el tama\u00f1o de R <\/strong>(Para simplificar, asumiremos que M &gt; sqr(|R|) y M&lt;|R|). Eval\u00fae el costo de E\/S para M = R\/2, M = R\/3.<\/p><p>Podemos decidir comenzar a aplicar hash a R en la memoria como si todo fuera a ir bien (M &gt; |R|), luego, tan pronto como nos quedemos sin memoria, colocamos ciertos paquetes hash en el disco (comenzando desde el final). Estos valores hash ahora se encontrar\u00e1n en el mismo paquete. Luego leemos S y lo unimos con los paquetes de R que se encuentran en la memoria. Las tuplas de S que se unen a un paquete de R en el disco se escriben en el disco como un paquete hash. Finalmente volvemos a leer los paquetes R y S en el disco para producir los resultados que faltan.<\/p><p>Con M=|R|\/2, escribimos la mitad de |R|. Al final, la mitad de los paquetes hash quedan en la memoria, y en los discos el resto de paquetes que contienen la mitad de las tuplas de R (|R|\/2 entradas salidas). Pasamos S contra la tabla hash p\u00e1gina por p\u00e1gina (|S| entradas y salidas del disco). Producimos los resultados correspondientes a las tuplas de S uni\u00e9ndolas a los paquetes de R en memoria y escribimos las tuplas de S en el disco (en forma de paquetes hash).<span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1.125rem;\"> correspondiente a paquetes R en el disco.<\/span><\/p><p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1.125rem;\">Esto genera |S|\/2 entradas y salidas. Finalmente, releemos los paquetes de R y S en los discos, lo que genera entradas y salidas |R|\/2+|S|\/2. En total, hay, por tanto, 2 (|R|+|S|) entradas y salidas.<\/span><\/p><p>Con M=|R|\/3, obtenemos |R| + 2\/3 |R| + |S| + 2\/3|S| + 2\/3 |R| + 2\/3|S| = 7\/3 (|R|+|S|) entradas salidas.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-35a9dfa elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"35a9dfa\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-525afc6\" data-id=\"525afc6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-868c60f elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"868c60f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c29a84b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c29a84b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d9a2400\" data-id=\"d9a2400\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-57e059e elementor-widget elementor-widget-heading\" data-id=\"57e059e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Exercice-2\"><\/span>Ejercicio 2<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c466e7d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c466e7d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d3a1c2d\" data-id=\"d3a1c2d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-29caca7 elementor-widget elementor-widget-text-editor\" data-id=\"29caca7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Estamos ahora en un caso extremo en el que la memoria disponible es de s\u00f3lo unos pocos bytes; por otro lado, los datos se almacenan en una memoria electr\u00f3nica, por lo que el coste de lectura es similar al de la lectura desde la memoria.<\/p><p><strong>Pregunta 5<\/strong><\/p><p>Encontrar algoritmos y expresarlos con el formalismo del modelo iterador para realizar las siguientes operaciones: Selecci\u00f3n, proyecci\u00f3n, uni\u00f3n.<\/p><p>Especifique la memoria m\u00ednima requerida.<\/p><p><strong>Pregunta 6<\/strong><\/p><p>\u00bfPodemos realizar c\u00e1lculos de clasificaci\u00f3n o agregados? Si es as\u00ed, \u00bfc\u00f3mo?<\/p><p><strong>Pregunta 7<\/strong><\/p><p>Ahora tienes unos pocos KB de RAM. \u00bfC\u00f3mo optimizar las uniones?<\/p><p><strong>Pregunta 8<\/strong><\/p><p>\u00bfY clasificar o calcular agregados?<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-834d026 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"834d026\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-49ca56a\" data-id=\"49ca56a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-48667b3 elementor-widget elementor-widget-toggle\" data-id=\"48667b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-7591\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-7591\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Soluci\u00f3n<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-7591\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-7591\"><p>Estamos ahora en un caso extremo en el que la memoria disponible es de s\u00f3lo unos pocos bytes; por otro lado, los datos se almacenan en una memoria electr\u00f3nica, por lo que el coste de lectura es similar al de la lectura desde la memoria.<\/p><p><strong>Pregunta 5<\/strong><\/p><p>Encontrar algoritmos y expresarlos con el formalismo del modelo iterador para realizar las siguientes operaciones: Selecci\u00f3n, proyecci\u00f3n, uni\u00f3n.<\/p><p>Especifique la memoria m\u00ednima requerida.<\/p><p>Los operadores de selecci\u00f3n y proyecci\u00f3n trabajan tupla a tupla, por lo que no consumen RAM. La uni\u00f3n se puede realizar mediante un bucle anidado, no hay consumo de memoria (o 1 puntero por relaci\u00f3n).<\/p><p><strong>Pregunta 6<\/strong><\/p><p>\u00bfPodemos realizar c\u00e1lculos de clasificaci\u00f3n o agregados? Si es as\u00ed, \u00bfc\u00f3mo?<\/p><p>Por ejemplo, podemos escanear completamente la entrada del operador para encontrar la tupla que comparte la clave de clasificaci\u00f3n m\u00e1s peque\u00f1a, luego rehacer un escaneo completo de la entrada para entregar todas las tuplas que comparten esta clave, y as\u00ed sucesivamente hasta haber producido todas las tuplas. Por tanto, podemos ordenar tuplas de esta manera.<\/p><p>Para calcular agregados, procedemos de la misma manera calculando el agregado de las tuplas que comparten la clave.<\/p><p><strong>Pregunta 7<\/strong><\/p><p>Ahora tienes unos pocos KB de RAM. \u00bfC\u00f3mo optimizar las uniones?<\/p><p>Hacemos un bloque de bucle anidado...<\/p><p><strong>Pregunta 8<\/strong><\/p><p>\u00bfY clasificar o calcular agregados?<\/p><p>Cada vez que pasamos datos, almacenamos en b\u00fafer varios valores de clasificaci\u00f3n o agregados. Cada pasada permite as\u00ed procesar varias claves de clasificaci\u00f3n o de agregaci\u00f3n.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>An\u00e1lisis de software P\u00e1gina de inicio Wiki Ejercicios corregidos sobre operadores relacionales Esta p\u00e1gina presenta casos de uso para operadores relacionales a trav\u00e9s de ejercicios corregidos. Recordatorio \u2026 <\/p>","protected":false},"author":1,"featured_media":0,"parent":4609,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-20097","page","type-page","status-publish","hentry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/20097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/comments?post=20097"}],"version-history":[{"count":7,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/20097\/revisions"}],"predecessor-version":[{"id":20507,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/20097\/revisions\/20507"}],"up":[{"embeddable":true,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/4609"}],"wp:attachment":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/media?parent=20097"}],"curies":[{"name":"gracias","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}