{"id":20109,"date":"2024-02-07T09:30:22","date_gmt":"2024-02-07T08:30:22","guid":{"rendered":"https:\/\/complex-systems-ai.com\/?page_id=20109"},"modified":"2024-02-13T07:21:13","modified_gmt":"2024-02-13T06:21:13","slug":"exercices-concurrence","status":"publish","type":"page","link":"https:\/\/complex-systems-ai.com\/es\/analisis-de-software\/ejercicios-de-competencia\/","title":{"rendered":"3 ejercicios de competici\u00f3n corregidos"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"20109\" class=\"elementor elementor-20109\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4f33197 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4f33197\" 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-ca2fe64\" data-id=\"ca2fe64\" 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-5f10ea1 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"5f10ea1\" 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-d3fc0d9\" data-id=\"d3fc0d9\" 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-716bcd1 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"716bcd1\" 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-affc16f\" data-id=\"affc16f\" 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-f2ba715 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"f2ba715\" 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-5d120fd elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5d120fd\" 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-e942c7e\" data-id=\"e942c7e\" 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-bfcf550 elementor-widget elementor-widget-heading\" data-id=\"bfcf550\" 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\/ejercicios-de-competencia\/#Exercices-corriges-sur-les-controles-de-concurrence\" >Ejercicios corregidos sobre controles de concurrencia.<\/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\/ejercicios-de-competencia\/#Preambule\" >Pre\u00e1mbulo<\/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\/ejercicios-de-competencia\/#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\/ejercicios-de-competencia\/#Exercice-2\" >Ejercicio 2<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/complex-systems-ai.com\/es\/analisis-de-software\/ejercicios-de-competencia\/#Exercice-3\" >Ejercicio 3<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Exercices-corriges-sur-les-controles-de-concurrence\"><\/span>Ejercicios corregidos sobre controles de concurrencia.<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-82516d0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"82516d0\" 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-32e4d41\" data-id=\"32e4d41\" 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-49e7088 elementor-widget elementor-widget-text-editor\" data-id=\"49e7088\" 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>Los problemas de concurrencia son comunes en una base de datos. El bloqueo y el estampado son dos t\u00e9cnicas para evitarlos. A continuaci\u00f3n se muestran ejercicios corregidos sobre este tema.<\/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=\"competencia\" 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-a36018f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a36018f\" 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-7303ce0\" data-id=\"7303ce0\" 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-a958fd3 elementor-widget elementor-widget-heading\" data-id=\"a958fd3\" 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=\"Preambule\"><\/span>Pre\u00e1mbulo<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-2b6ef2f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2b6ef2f\" 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-452cd88\" data-id=\"452cd88\" 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-dad181c elementor-widget elementor-widget-text-editor\" data-id=\"dad181c\" 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>Expresi\u00f3n de restricciones<br \/>\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014<\/p><p>0. Pre\u00e1mbulo de PL\/SQL<br \/>SQL: <br \/>\u2013 Declarativo por lo tanto sin estructuras de control (bucles, condiciones, etc.)<br \/>\u2013 Operaciones de conjunto de datos<br \/>=&gt; Pocas aplicaciones se pueden lograr mediante una simple secuencia de consultas SQL; necesidad de enriquecer SQL con capacidades procesales.<br \/>3 posibilidades<br \/>\u2013 SQL incorporado (PRO*C\u2026)<br \/>\u2013 API de comunicaci\u00f3n (SQL-CLI\u2026)<br \/>\u2013 Lenguaje dedicado (PL\/SQL\u2026)<\/p><p>Ventaja de los lenguajes dedicados: Procedimientos ejecutados en el lado del servidor -&gt; S\u00f3lo los resultados se devuelven al cliente -&gt; Intercambios de red m\u00ednimos<\/p><p>P0. Procedimientos PL\/SQL<\/p><p>P0.1 <br \/>CREAR O REEMPLAZAR EL PROCEDIMIENTO D<br \/>(noc EN CUENTAS.Numero%TYPE, <br \/>cr\u00e9dito EN N\u00daMERO )<br \/>ES<br \/>COMENZAR<br \/>ACTUALIZAR CUENTAS ESTABLECER SALDO = SALDO \u2013 d\u00e9bito<br \/>DONDE N\u00famero = noc;<br \/>FIN;<br \/>\/<\/p><p>P0.2 <br \/>CREAR O REEMPLAZAR EL PROCEDIMIENTO C <br \/>(noc EN CUENTAS.Numero%TYPE, <br \/>cr\u00e9dito EN CUENTAS.Saldo%TYPE)<br \/>ES<br \/>COMENZAR<br \/>ACTUALIZAR CUENTAS ESTABLECER SALDO = SALDO + cr\u00e9dito<br \/>DONDE N\u00famero = noc;<br \/>FIN;<br \/>\/<\/p><p>P0.3 <br \/>CREAR O REEMPLAZAR EL PROCEDIMIENTO S<br \/>(noc EN CUENTAS.N\u00famero%TYPE)<br \/>ES<br \/>elSaldo CUENTAS.Saldo%TYPE;<br \/>COMENZAR<br \/>SELECCIONE el saldo EN theBalance <br \/>DE CUENTAS <br \/>DONDE N\u00famero = noc;<br \/>DBMS_OUTPUT.PUT_LINE(elSaldo);<br \/>FIN;<br \/>\/<\/p><p>P0.4 <br \/>CREAR O REEMPLAZAR EL PROCEDIMIENTO V<br \/>(no de EN CUENTAS.Numero%TYPE,<br \/>noto EN CUENTAS.Numero%TYPE,<br \/>trans EN CUENTAS.Saldo%TYPE)<br \/>ES<br \/>COMENZAR<br \/>D (no de, trans);<br \/>C (noto, trans);<br \/>FIN;<br \/>\/<\/p><p>P0.5 <br \/>CREAR O REEMPLAZAR FUNCI\u00d3N comprobar <br \/>(noc EN CUENTAS.Numero%TYPE,<br \/>importe EN CUENTAS.Saldo%TYPE)<br \/>VOLVER BOOLEANO<br \/>ES<br \/>es Solvente BOOLEAN;<br \/>elSaldo CUENTAS.Saldo%TYPE;<br \/>COMENZAR<br \/>SELECCIONE el saldo EN theBalance<br \/>DE CUENTAS<br \/>DONDE N\u00famero = noc;<br \/>SI Saldo &gt;= monto ENTONCES<br \/>essolvente := VERDADERO;<br \/>DEM\u00c1S<br \/>esDisolvente := FALSO;<br \/>TERMINARA SI;<br \/>RETORNO es Solvente;<br \/>Comprobaci\u00f3n FINAL;<\/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-aa2c8fd elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"aa2c8fd\" 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-000bc1f\" data-id=\"000bc1f\" 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-0bf1753 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"0bf1753\" 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-e8ff244 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e8ff244\" 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-b4a79fc\" data-id=\"b4a79fc\" 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-96e84c3 elementor-widget elementor-widget-heading\" data-id=\"96e84c3\" 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-22440a5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"22440a5\" 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-e4dc3eb\" data-id=\"e4dc3eb\" 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-56cde00 elementor-widget elementor-widget-text-editor\" data-id=\"56cde00\" 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>Para evitar posibles problemas de concurrencia, el administrador opta por ejecutar las transacciones en serie. Consideramos el caso de dos transacciones simult\u00e1neas en la cuenta X, cuyo saldo inicial es de 1000 euros. Ambos son d\u00e9bitos, el primero son 400 euros, el segundo son 800 euros.<\/p><p>En el preciso momento en que T1 inicia su flujo, comienza T2.<\/p><p>Qu\u00e9 esta pasando ?<\/p><p>\u00bfC\u00f3mo podemos acelerar la ejecuci\u00f3n de estas transacciones?<\/p><p><strong>Pregunta 2<\/strong><\/p><p>Seis administradores de cuentas bancarias realizan cada uno, en una transacci\u00f3n y simult\u00e1neamente, operaciones en 4 cuentas A, B, C y D. Sea Ei(A) una operaci\u00f3n de escritura en la cuenta A por parte del administrador i, y Li( A) a operaci\u00f3n de lectura de la cuenta A por parte del administrador i. Considere la siguiente secuencia de operaci\u00f3n: E2(A), L2(B), L6(D), E5(C), E3(A), L5(A), L1(C), L2(D), L3(C) , E4(C), E3(D), L4(B), L1(B).<\/p><ol><li>Constr\u00fayelo <a href=\"https:\/\/complex-systems-ai.com\/es\/teoria-de-grafos\/\">grafico<\/a> precedencia de estas transacciones.<\/li><li>\u00bfQu\u00e9 problemas de ejecuci\u00f3n podr\u00edan surgir?<\/li><li>\u00bfEsta ejecuci\u00f3n es serializable?<\/li><\/ol>\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-39dbf6f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"39dbf6f\" 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-b917ef2\" data-id=\"b917ef2\" 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-bb4e6a2 elementor-widget elementor-widget-toggle\" data-id=\"bb4e6a2\" 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-1961\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-1961\" 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-1961\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-1961\"><div>P1. Restricciones<\/div><div>Recordatorios de restricciones<\/div><div>\u00a0 tiene. Al definir el esquema (verificar)<\/div><div>\u00a0 b. Mediante el comando CREAR ASERCI\u00d3N:<\/div><div>\u00a0 \u00a0 El programador define lo que siempre debe ser cierto.\u00a0<\/div><div>\u00a0 \u00a0 El DBMS identifica las modificaciones de la base de datos que pueden afectar las restricciones y no las hace efectivas si violan una restricci\u00f3n.<\/div><div>\u00a0 vs. Mediante el uso de Trigger (reglas de Evento-Condici\u00f3n-Acci\u00f3n):<\/div><div>\u00a0 \u00a0 El programador define las reacciones del DBMS a los cambios de la base de datos.<\/div><div>\u00a0 \u00a0 El DBMS los aplica.<\/div><div>\u00a0<\/div><div>\u00a0 tiene. Al definir el esquema:<\/div><div>\u00a0 CREAR TABLA DE CUENTAS (<\/div><div>\u00a0 \u00a0 N\u00famero INT CLAVE PRIMARIA,<\/div><div>\u00a0 \u00a0 \u2026,<\/div><div>\u00a0 \u00a0 VERIFICACI\u00d3N DE SALDO FLOTANTE (Saldo&gt;=0 Y (TIPO &lt;&gt; &#039;Ahorros&#039; O Saldo &lt;= 2000))<\/div><div>\u00a0 )<\/div><div>\u00a0<\/div><div>\u00a0 b. Afirmaci\u00f3n<\/div><div>\u00a0 CREAR ASERCI\u00d3N BonSoldeAssert VERIFICAR\u00a0<\/div><div>\u00a0 (2000 &lt;= TODOS(Seleccione Saldo DE CUENTAS DONDE Tipo=&#039;Ahorros&#039;) Y 0&gt; (Seleccione Saldo DE CUENTAS)<\/div><div>\u00a0\u00a0<\/div><div>\u00a0 vs. Desencadenar<\/div><div>\u00a0 CREAR GATILLO BonSale<\/div><div>\u00a0 ANTES DE INSERTAR O ACTUALIZAR LAS CUENTAS\u00a0<\/div><div>\u00a0 POR CADA FILA<\/div><div>\u00a0 CUANDO (:NEW.Balance&lt;0 OR (:NEW.Balance&gt;2000 AND :NEW.Type=&#039;Ahorros&#039;))<\/div><div>\u00a0 ABORTAR TRANSACCI\u00d3N;<\/div><div>\u00a0<\/div><div>P2. Observaci\u00f3n de transacciones<\/div><div>\u00a0<\/div><div>T1: A&lt;-1500<\/div><div>Pantallas: \u201cA&lt;-1500\u201d \u2014 TODO: \u00bfEst\u00e1 realmente sucediendo la pantalla?<\/div><div>A&lt;-2100 ==&gt; Viola la restricci\u00f3n \u201cel saldo del tipo de ahorro implica un saldo &lt;2000\u201d<\/div><div>==&gt; Aborto de toda la transacci\u00f3n (Revertir)<\/div><div>==&gt; Un&lt;-1000<\/div><div>\u00a0<\/div><div>T2: A&lt;-700<\/div><div>B&lt;-1300<\/div><div>COMPROMETERSE<\/div><div>\u00a0<\/div><div>T3: A&lt;- -900 ==&gt; Viola la restricci\u00f3n \u201csaldo &gt;= 0\u201d<\/div><div>==&gt; Aborto de toda la transacci\u00f3n<\/div><div>\u00a0<\/div><div>T4: Muestra \u201cA&lt;-700\u201d<\/div><div>P\u00f3ster \u201cB&lt;-1300\u201d<\/div><\/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-f98e9b6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f98e9b6\" 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-cf51c16\" data-id=\"cf51c16\" 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-2dfd144 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"2dfd144\" 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-9e7a474 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9e7a474\" 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-cd76888\" data-id=\"cd76888\" 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-473fe0f elementor-widget elementor-widget-heading\" data-id=\"473fe0f\" 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-8a1d7d7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8a1d7d7\" 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-26c68db\" data-id=\"26c68db\" 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-64f918c elementor-widget elementor-widget-text-editor\" data-id=\"64f918c\" 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 3<\/strong><\/p><p>Nos situamos en el caso del bloqueo, con gr\u00e1nulo de nivel tupla.<\/p><p>Demuestre que el algoritmo de bloqueo \u201cdetecta\u201d el problema de esta ejecuci\u00f3n. \u00bfCu\u00e1l ser\u00eda el algoritmo de resoluci\u00f3n de conflictos m\u00e1s adecuado para esta ejecuci\u00f3n?<\/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-d332796 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d332796\" 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-5a7d6d1\" data-id=\"5a7d6d1\" 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-f38fe62 elementor-widget elementor-widget-toggle\" data-id=\"f38fe62\" 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-2551\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-2551\" 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-2551\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-2551\"><div>Transacci\u00f3n: Secuencia de operaciones (Lectura \u2013 Escritura) aplicables a una BD; cuatro palabras clave: comienza con BEGIN, termina correctamente con COMMIT, falla con ABORT, se deshace con ROLLBACK.<\/div><div>\u00a0<\/div><div>Propiedades de la transacci\u00f3n:<\/div><div>Atomicidad: una transacci\u00f3n se ejecuta por completo o no se ejecuta en absoluto<\/div><div>Coherencia: Una transacci\u00f3n mueve la base de datos desde un estado consistente \u2013 donde se verifican las restricciones (integridad y otras) \u2013 a un estado consistente.<\/div><div>Aislamiento: No hay interacci\u00f3n entre transacciones ejecutadas en paralelo.<\/div><div>D urabilidad: No hay p\u00e9rdida de resultados de una transacci\u00f3n ejecutada.<\/div><div>\u00a0<\/div><div>ACID asegurado por: Tolerancia a fallos (A, C y D) + Control de concurrencia (principalmente I, pero I tiene repercusiones en C y D)<\/div><div>\u00a0<\/div><div>P3.<\/div><div>Soluci\u00f3n trivial: se ejecuta 1 transacci\u00f3n a la vez en la base de datos bloqueada.\u00a0<\/div><div>T1 luego T2<\/div><div>\u00a0<\/div><div>Problemas de rendimiento: Leer el mismo objeto, escribir objetos diferentes, son acciones que no comprometen el aislamiento -&gt; Posibilidad de paralelizar transacciones.<\/div><div>Para mejorar el rendimiento: intercale la ejecuci\u00f3n asegur\u00e1ndose de que la ejecuci\u00f3n intercalada sea equivalente a la ejecuci\u00f3n en serie.<\/div><div>\u00a0<\/div><div>Ilustraci\u00f3n del problema de intercalado de ejecuci\u00f3n con Q4:<\/div><div><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-20115 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd54.png\" alt=\"control de competencia\" width=\"846\" height=\"441\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd54.png 846w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd54-300x156.png 300w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd54-768x400.png 768w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd54-18x9.png 18w\" sizes=\"(max-width: 846px) 100vw, 846px\" \/><\/div><div>Sin un mecanismo de control de concurrencia, las ejecuciones no son deterministas: el resultado depende del orden de las operaciones entre transacciones (lecturas\/escrituras)<\/div><\/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-f0bc458 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f0bc458\" 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-2c2df5a\" data-id=\"2c2df5a\" 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-d6fa99c elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"d6fa99c\" 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-885bcee elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"885bcee\" 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-81bb464\" data-id=\"81bb464\" 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-951995d elementor-widget elementor-widget-heading\" data-id=\"951995d\" 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-3\"><\/span>Ejercicio 3<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-9dbd58a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9dbd58a\" 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-0c67a19\" data-id=\"0c67a19\" 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-c83599e elementor-widget elementor-widget-text-editor\" data-id=\"c83599e\" 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 4<\/strong><\/p><p>Sugerir un <a href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/\">algoritmo<\/a> algoritmo de lectura y escritura con estampaci\u00f3n. \u00bfEstamos seguros de que esta ejecuci\u00f3n sea serializable con el sistema de estampado? Demuestre que esto es cierto para cualquier ejecuci\u00f3n no serializable.<\/p><p><strong>Pregunta 5<\/strong><\/p><p>Compare las dos familias de t\u00e9cnicas vistas anteriormente (bloqueo y estampado). \u00bfEl algoritmo de estampado simple es m\u00e1s adecuado para esta ejecuci\u00f3n que el bloqueo?<\/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-7572858 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7572858\" 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-d9d4cba\" data-id=\"d9d4cba\" 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-31d666f elementor-widget elementor-widget-toggle\" data-id=\"31d666f\" 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-5221\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-5221\" 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-5221\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-5221\"><p>P4. Gr\u00e1fico de precedencia<\/p><p>El mecanismo de control de la competencia debe proporcionar a cada transacci\u00f3n la ilusi\u00f3n de que es la \u00fanica que se ejecuta en la BD, es decir, la ejecuci\u00f3n efectiva (por lo tanto entrelazada) de las transacciones debe ser equivalente a una ejecuci\u00f3n en serie de \u00e9stas (ejecuci\u00f3n: secuencia ordenada de lecturas). \/operaciones de escritura).<br \/>Las ejecuciones equivalentes a una ejecuci\u00f3n en serie se denominan serializables. El mecanismo de concurrencia debe garantizar que solo genere ejecuciones serializables.<\/p><p>Ejecuci\u00f3n: secuencia ordenada de operaciones de lectura\/escritura por diferentes transacciones.<br \/>Ejecuci\u00f3n en serie: Las operaciones de diferentes transacciones no se entrelazan.<\/p><p><img decoding=\"async\" class=\"alignnone wp-image-20116 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd55.png\" alt=\"control de competencia\" width=\"417\" height=\"451\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd55.png 417w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd55-277x300.png 277w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd55-11x12.png 11w\" sizes=\"(max-width: 417px) 100vw, 417px\" \/><\/p><p>\u00bfEs posible reordenar la ejecuci\u00f3n para que sea serial?<\/p><div><p>No, porque es imposible intercambiar entradas con cualquier otra operaci\u00f3n -&gt; Induce una relaci\u00f3n de precedencia entre transacciones.<\/p><p>M\u00e1s formalmente:<br \/>Ti precede a Tj (\u201cTi &lt; Tj\u201d) si Ai ocurre antes<\/p><p>Aj en la ejecuci\u00f3n Ai y Aj implican el mismo objeto del BD<\/p><p>Ai o Aj es una acci\u00f3n de escritura.<\/p><p>Esta relaci\u00f3n de precedencia genera el gr\u00e1fico de precedencia, en el que un v\u00e9rtice es una transacci\u00f3n y una arista dirigida es una relaci\u00f3n de precedencia.<\/p><p>Por ejemplo: Ti -&gt; Tj significa que Ti precede a Tj<\/p><p>Vista por objeto de operaciones (m\u00e1s simple que la vista global, pero pierde el orden de las operaciones dentro de una transacci\u00f3n):<\/p><p>A: E2(A) E3(A) L5(A)<\/p><p>B: L2(B) L4(B) L1(B)<\/p><p>C: E5(C) L1(C) L3(C) E4(C)<\/p><p>D: L6(D) L2(D) E3(D)<\/p><p>Gr\u00e1fico de precedencia:<\/p><p>T2 -&gt; T3 &lt;-&gt; T5 -&gt; T1 -&gt; T4<\/p><p>T6 -&gt;|<\/p><p>Propiedad del gr\u00e1fico de precedencia:<\/p><p>Ejecuci\u00f3n serializable si no hay ciclo (por ejemplo, arriba, T3 debe realizarse antes que T5, que debe realizarse antes de T3)<\/p><p>Problema: la detecci\u00f3n de ciclos es NP completa (no determinista, polin\u00f3mica, dif\u00edcil)<\/p><p>Observ\u00f3:<\/p><p>Propiedad de aislamiento = Las transacciones deben ejecutarse AS si estuvieran solas en la base de datos. La serializaci\u00f3n garantiza que el resultado de una ejecuci\u00f3n intercalada sea el mismo que el de una ejecuci\u00f3n en serie. Pero la serializaci\u00f3n no es una condici\u00f3n suficiente para garantizar que las transacciones se ejecuten de forma aislada.<\/p><p>Ejemplo de ejecuci\u00f3n serializable no aislada (ABORTO en cascada):<\/p><p>T1 &lt; T2 &lt; \u2026 &lt; Tn<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-20117 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd56.png\" alt=\"control de competencia\" width=\"272\" height=\"251\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd56.png 272w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd56-13x12.png 13w\" sizes=\"(max-width: 272px) 100vw, 272px\" \/><\/p><p>P5. Mecanismo de aislamiento m\u00e1s utilizado: bloquear y desbloquear<\/p><p>Protocolo de bloqueo m\u00e1s utilizado: Bloqueo bif\u00e1sico<\/p><p>Fase 1: se adquieren todos los bloqueos, no se realiza ning\u00fan desbloqueo<\/p><p>Fase 2: se completan todos los desbloqueos, no se adquieren bloqueos<\/p><p>Propiedad: Garantiza la serializaci\u00f3n de la ejecuci\u00f3n de un cronograma legal (es decir, lock1(X) no puede ir seguido de lock2(X) sino de unlock1(X))<\/p><p>Cuatro tipos de bloqueos: compartido VS exclusivo\/corto VS largo (consulte la matriz de compatibilidad indicada)<\/p><p>Dos tipos de operaci\u00f3n: Lectura y Escritura.<\/p><p>Diferentes grados de aislamiento:<\/p><p>* Grado 0 (Leer no comprometido):<\/p><p>Instalaci\u00f3n de bloqueos exclusivos de escritura corta.<\/p><p>-&gt; Lee incluso objetos modificados por transacciones que no se han comprometido<\/p><p>* Grado 1 (Lectura comprometida):<\/p><p>Instalaci\u00f3n de bloqueos exclusivos de escritura larga.<\/p><p>Establecer bloqueos de lectura compartidos breves<\/p><p>-&gt; Solo leer objetos modificados por transacciones confirmadas<\/p><p>* Grado 2 (Lectura Repetible):<\/p><p>Grado 1 + Instalaci\u00f3n de bloqueos de lectura compartidos largos<\/p><p>-&gt; Lectura repetible<\/p><p>* Grado 3 (Serializable):<\/p><p>Nivel 2 + Elimina fantasmas<\/p><p>El bloqueo \u201cdetecta\u201d el problema de serializaci\u00f3n: puntos muertos<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-20118\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd57-300x175.png\" alt=\"control de competencia\" width=\"300\" height=\"175\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd57-300x175.png 300w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd57-18x10.png 18w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd57.png 712w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p><p>Varias formas de gestionar los puntos muertos<\/p><p>* TimeOut: elimina las transacciones que tardan m\u00e1s de x segundos en ejecutarse<\/p><p>* Detecci\u00f3n: Gr\u00e1fico de espera<\/p><p>T5 &lt;-&gt; T3<\/p><p>\u00a0 \u00a0&lt;- T1<\/p><p>\u00a0 \u00a0&lt;- T4<\/p><p>\u00a0 \u00a0Gr\u00e1fico construido a medida que avanza la ejecuci\u00f3n<\/p><p>\u00a0 \u00a0Revertir cualquier transacci\u00f3n que pueda causar que aparezca un ciclo en el gr\u00e1fico de espera<\/p><p>\u00a0 \u00a0Ejemplo: 1. T5 -&gt; T3 2. T1 -&gt; T5 -&gt; T3 3. T1 -&gt; T5 &lt;-&gt; T3 ==&gt; Reversi\u00f3n de T3<\/p><p>\u00a0 \u00a0Problema: La detecci\u00f3n del ciclo siempre es NP completa; puede ser largo si el gr\u00e1fico es ancho<\/p><p>* Prevenci\u00f3n: Marcas de tiempo<\/p><p>\u00a0 \u00a0Da prioridad a las transacciones antiguas para evitar que se produzcan bloqueos.<\/p><p>\u00a0 \u00a0Marca de tiempo asociada a cada transacci\u00f3n.<\/p><p>\u00a0 \u00a0T1 quiere adquirir un bloqueo sobre un objeto bloqueado por T2.<\/p><p>\u00a0 \u00a0Soluci\u00f3n 1: esperar y morir<\/p><p>si T1 es mayor que T2, T1 espera<\/p><p>de lo contrario, T1 Rollback (y se reinicia con la misma marca de tiempo)<\/p><p>\u00a0 \u00a0Soluci\u00f3n 2: Wound-Wait (espera transacciones antiguas)<\/p><p>si T1 es anterior a T2, T2 debe abandonar el bloqueo y revertir<\/p><p>de lo contrario, T1 espera<\/p><p>\u00a0 \u00a0 -&gt; Nunca interbloquear: T1 acabar\u00e1 siendo el m\u00e1s antiguo y por tanto se ejecutar\u00e1 con prioridad.<\/p><p>\u00a0 \u00a0Esperar-morir VS Herir-esperar:<\/p><p>\u00a0 \u00a0 \u00a0 Candados adquiridos al inicio de una transacci\u00f3n -&gt; Es m\u00e1s probable que las transacciones antiguas tengan sus candados antes que las nuevas<\/p><p>\u00a0 \u00a0 \u00a0 -&gt; Espera de herida: causa poca reversi\u00f3n porque ver suposici\u00f3n<\/p><p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0Esperar-morir provoca una gran cantidad de retroceso porque se supone que es as\u00ed; pero cada vez al comienzo de transacciones j\u00f3venes<\/p><p>Sellos:<\/p><p>T2:1 T6:2T5:3T3:4T1:5T4:6<\/p><p>Espera-muere:<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-20119 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd58.png\" alt=\"esperar-morir\" width=\"717\" height=\"784\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd58.png 717w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd58-274x300.png 274w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd58-11x12.png 11w\" sizes=\"(max-width: 717px) 100vw, 717px\" \/><\/p><p>Sellos:<\/p><p>T2:1 T6:2T5:3T3:4T1:5T4:6<\/p><p>Espera de herida:<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-20120 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd59.png\" alt=\"espera-herida\" width=\"725\" height=\"785\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd59.png 725w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd59-277x300.png 277w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd59-11x12.png 11w\" sizes=\"(max-width: 725px) 100vw, 725px\" \/><\/p><p>P5.b.<br \/>Bloqueo altruista: una transacci\u00f3n libera sus bloqueos cuando ya no los necesita.<br \/>+: Efectivo<br \/>\u2013 : (i) Problema de lectura sucia; (ii) Ejecuci\u00f3n a priori no 2PL, por lo tanto a priori no serializable.<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-20121 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd60.png\" alt=\"cerradura altruista\" width=\"733\" height=\"200\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd60.png 733w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd60-300x82.png 300w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd60-18x5.png 18w\" sizes=\"(max-width: 733px) 100vw, 733px\" \/><\/p><p>P6.<br \/>Sistema de estampado: Asigna un sello a cada transacci\u00f3n (generalmente la marca de tiempo de su creaci\u00f3n), impide el acceso a objetos contrarios al orden de los sellos -&gt; Prioridad a transacciones j\u00f3venes. Las transacciones que llegan tarde se revierten y se reinician con una nueva marca de tiempo. Parte de la familia de protocolos optimistas, es decir, un m\u00e9todo eficaz cuando hay pocos conflictos debido a pocos gastos generales, pero potencialmente mucha reversi\u00f3n.<\/p><p>Dos reglas:<\/p><p>Leer demasiado tarde: una transacci\u00f3n solo puede leer datos si es m\u00e1s reciente que el \u00faltimo escritor<\/p><p>Escribir demasiado tarde: una transacci\u00f3n solo puede escribir datos si es m\u00e1s joven que el \u00faltimo lector y escritor.<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-20122 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd61.png\" alt=\"estampado\" width=\"505\" height=\"246\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd61.png 505w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd61-300x146.png 300w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd61-18x9.png 18w\" sizes=\"(max-width: 505px) 100vw, 505px\" \/><\/p><p>Algoritmo b\u00e1sico:<\/p><p>\u2013 Colocar sello en cada transacci\u00f3n.<\/p><p>\u2013 Cada objeto conserva el sello del \u00faltimo lector as\u00ed como el del \u00faltimo escritor<\/p><p>\u2013 Cuando Ti quiere leer el objeto O:<\/p><p>Si el sello &lt; O.LastWriter: Leer demasiado tarde -&gt; Ti ROLLBACK luego se reinicia con un nuevo sello<\/p><p>De lo contrario est\u00e1 bien<\/p><p>\u2013 Cuando Ti quiere escribir el objeto O:<\/p><p>Si Ti.stamp &lt; O.LastReader || Ti.stamp &lt; O.LastWriter: Escribir demasiado tarde -&gt; Ti ROLLBACK luego se reinicia con un nuevo sello<\/p><p>De lo contrario est\u00e1 bien<\/p><p>Ejemplo:<\/p><p>Sellos:<\/p><p>T2: 1-8 T6: 2T5: 3-7T3: 4T1: 5T4: 6<\/p><p>Objetos:<\/p><p>A (L: ; E: 1) A (L: ; E: 4)<\/p><p>segundo (l: 1; mi: )<\/p><p>C (L: 5; E: 3-6) C (L: 5; E: 6)<\/p><p>D (L: 2; E: 4)<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-20123 size-full\" src=\"http:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd62.png\" alt=\"estampado\" width=\"377\" height=\"286\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd62.png 377w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd62-300x228.png 300w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2024\/02\/bdd62-16x12.png 16w\" sizes=\"(max-width: 377px) 100vw, 377px\" \/><\/p><p>Los gr\u00e1ficos de precedencia de ejecuciones de estampado nunca tienen un ciclo.<\/p><p>Prueba por absurdo:<\/p><p>Considere el gr\u00e1fico de precedencia c\u00edclica de una ejecuci\u00f3n obtenida mediante estampaci\u00f3n:<\/p><p>T1 -&gt; \u2026 -&gt; Ti &lt;-&gt; Tj -&gt; \u2026 -&gt; Tn =&gt; Ti &lt; Tj &lt; Ti<\/p><p>&lt;=&gt; yo &lt; j &lt; yo<\/p><p>Contradicci\u00f3n<\/p><p>P8.<\/p><p>Estampar bien cuando hay pocos conflictos (sin esperas); malo cuando hay muchos conflictos (muchas reversiones).<\/p><p>Buen bloqueo cuando hay muchos conflictos (menos retroceso que estampado); malo cuando hay pocos conflictos (esperas innecesarias, gastos generales de administraci\u00f3n de bloqueos).<\/p><p>Los sistemas comerciales intentan combinar las ventajas de ambos: estampado multiversi\u00f3n (una variaci\u00f3n del estampado \u00fanico discutido anteriormente) para transacciones de solo lectura y bloqueo 2PL para transacciones de lectura\/escritura. (ver p\u00e1g. 978 de \u201cDB Systems: el libro completo\u201d de Widom y Ullmann)<\/p><\/div><\/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>P\u00e1gina de inicio de Software Analysis Wiki Ejercicios corregidos sobre controles de concurrencia Los problemas de concurrencia son comunes en una base de datos. Aislamiento... <\/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-20109","page","type-page","status-publish","hentry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/20109","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=20109"}],"version-history":[{"count":16,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/20109\/revisions"}],"predecessor-version":[{"id":20520,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/20109\/revisions\/20520"}],"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=20109"}],"curies":[{"name":"gracias","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}