La auditoría de sistemas es un tema que puede llegar a ser complejo en la empresa, como todo tópico tiende a ser abordado desde distintos puntos de vista y no deja de ser válido el aspecto técnico contra el aspecto administrativo.
Desde el aspecto administrativo se esperan tener números que demuestren la efectividad de las reglas tomadas y de los ahorros conseguidos.
El aspecto técnico implica la rapidez de las tareas y los ahorros de tiempo para permitir el hacer otras tareas.
Los gerentes esperan de sus jefes técnicos la generación de simulaciones con lo que costaría en tiempo vs dinero invertido vs posible impacto para asegurar la necesidad de fondos para sus actividades, es parte de su set de conocimientos y necesidades.
Para los Jefes Técnicos es implícita esa necesidad y es difícil el concepto de generar aún mas trabajo para las actividades críticas del negocio.
Los dos lados de la moneda son difíciles de conciliar pero no imposible, varias instituciones han diseñado modelos de gobernabilidad de TI basados en las diferencias de conceptualización, convirtiendo tareas criticas en métricas medibles.
Para una persona técnica a veces es complicado el convertir las posibilidades de desastre en algo cuantificable, tan sólo la pérdida o corrupcion de datos parcial implica una investigación costosa y una posible pérdida monetaria y de confianza.
La comparación de cambios, el seguimiento, la responsabilidad documentada y una adecuada política de proceso ayuda a reducir la posibilidad de factores impredecibles, por otro lado permite una rápida recuperación ante accidentes.
Es importante para todos los responsables en una empresa el involucrarse y tratar tanto de comprender a sus colegas como el facilitar la comprensión de sus responsabilidades para mejorar la eficacia de los procesos en la empresa.
Showing posts with label Optimización. Show all posts
Showing posts with label Optimización. Show all posts
Wednesday, May 27, 2015
Thursday, June 26, 2014
Programando para Móbiles
¿Porqué compilar en lenguaje nativo es mejor?
El compilar en lenguaje nativo contrario al ejecutar tecnologías híbridas como el html5 tiene muchas ventajas para el desarrollador serio:La aplicación es más rápida tanto de instalar como de ejecutar
Las aplicaciones nativas no traen tanto bagaje de gráficos extras ni máquinas virtuales que provocan grandes pausas de latencia en los teléfonos que no son aparatos diseñados para tener capacidad de procesamiento.En un tiempo donde la transmisión de datos sigue siendo un recurso premium no podemos darnos el lujo de obligar a nuestros clientes a bajar una gran cantidad de datos simplemente por una mala planificación y/o mala decisión a la hora de elegir una herramienta para trabajar.
La aplicación es más segura
Una aplicación compilada en lenguaje nativo está encapsulada, así que sus datos están protegidos, no se puede decir lo mismo de html5 por lo cual sus aplicaciones son muy reducidas.
El uso de herramientas personales esta restringido
El soporte a gráficos es limitado
El soporte a gráficos es limitado
Los frameworks para desarrollo no nativo tienen un soporte de gráficos muy limitado debido a las diferencias tan marcadas de manejo entre las diferentes plataformas, y no permiten un buen uso de 3d
In-eficiencia del código
Los framework de programación móvil orientadas a Web dependen de librerias de traducción de código que no son eficientes lo que dificulta la correcta ejecución del diseño original de la app.
Tuesday, June 10, 2014
¿Como Optimizar SQL de manera visual?
Uno de los retos del día a día es optimizar los SQL que deben ejecutarse en nuestras bases de datos.
Muchos preguntarán el porqué de ésto, tomando en cuenta las capacidades procesales de las máquinas de hoy en día pero la respuesta es justamente que la capacidad de procesamiento es costosa, y debemos llegar a un punto de equilibrio muy por debajo del techo de la capacidad promedio de procesamiento si deseamos estar preparados para las "horas pico"
Los motores de bases de datos actuales nos permiten hacer búsquedas muy específicas y aunque nos parezcan ínfimas las velocidades de búsqueda, la cantidad de éstas es simplemente inmensa y una diferencia de 0.1 segundo entre una búsqueda y otra es una ventaja enorme.
Optimizar sentencias pequeñas no presenta problema, pero que tal una de ésta categoría?
SELECT C.Phone_Number, C.Honorific, C.First_Name, C.Last_Name,
C.Suffix, C.Address_ID, A.Address_ID, A.Street_Address_Line1,
A.Street_Address_Line2, A.City_Name, A.State_Abbreviation,
A.ZIP_Code, OD.Deferred_Shipment_Date, OD.Item_Count,
ODT.Text, OT.Text, P.Product_Description, S.Shipment_Date
FROM Orders O, Order_Details OD, Products P, Customers C, Shipments S,
Addresses A, Code_Translations ODT, Code_Translations OT
WHERE UPPER(C.Last_Name) LIKE :Last_Name||'%'
AND UPPER(C.First_Name) LIKE :First_Name||'%'
AND OD.Order_ID = O.Order_ID
AND O.Customer_ID = C.Customer_ID
AND OD.Product_ID = P.Product_ID(+)
AND OD.Shipment_ID = S.Shipment_ID(+)
AND S.Address_ID = A.Address_ID(+)
AND O.Status_Code = OT.Code
AND OT.Code_Type = 'ORDER_STATUS'
AND OD.Status_Code = ODT.Code
AND ODT.Code_Type = 'ORDER_DETAIL_STATUS'
AND O.Order_Date > :Now - 366
ORDER BY C.Customer_ID, O.Order_ID DESC, S.Shipment_ID, OD.Order_Detail_ID;
Por eso hoy voy a mostrar un método muy usado, VST
Para empezar vamos a clasificar las partes de la consulta de la siguiente manera, vamos a crear un diagrama de tipo autómata en la que:
Las tablas usadas en la consulta serán los nodos.
Los Joins serán las líneas de conexión entre los nodos
y los filtros nos guiarán con la ruta a seguir.
De ésta manera la consulta anterior se reclasificaría así:
Tablas
Orders O,
Order_Details OD,
Products P,
Customers C,
Shipments S,
Addresses A,
Code_Translations ODT,
Code_Translations OT
Joins
OD.Order_ID = O.Order_ID
O.Customer_ID = C.Customer_ID
OD.Product_ID = P.Product_ID(+)
OD.Shipment_ID = S.Shipment_ID(+)
S.Address_ID = A.Address_ID(+)
O.Status_Code = OT.Code
OD.Status_Code = ODT.Code
Filtros
WHERE UPPER(C.Last_Name) LIKE :Last_Name||'%'
AND UPPER(C.First_Name) LIKE :First_Name||'%'
AND OT.Code_Type = 'ORDER_STATUS'
AND O.Order_Date > :Now – 366
AND ODT.Code_Type = 'ORDER_DETAIL_STATUS'
Muchos preguntarán el porqué de ésto, tomando en cuenta las capacidades procesales de las máquinas de hoy en día pero la respuesta es justamente que la capacidad de procesamiento es costosa, y debemos llegar a un punto de equilibrio muy por debajo del techo de la capacidad promedio de procesamiento si deseamos estar preparados para las "horas pico"
Los motores de bases de datos actuales nos permiten hacer búsquedas muy específicas y aunque nos parezcan ínfimas las velocidades de búsqueda, la cantidad de éstas es simplemente inmensa y una diferencia de 0.1 segundo entre una búsqueda y otra es una ventaja enorme.
Optimizar sentencias pequeñas no presenta problema, pero que tal una de ésta categoría?
SELECT C.Phone_Number, C.Honorific, C.First_Name, C.Last_Name,
C.Suffix, C.Address_ID, A.Address_ID, A.Street_Address_Line1,
A.Street_Address_Line2, A.City_Name, A.State_Abbreviation,
A.ZIP_Code, OD.Deferred_Shipment_Date, OD.Item_Count,
ODT.Text, OT.Text, P.Product_Description, S.Shipment_Date
FROM Orders O, Order_Details OD, Products P, Customers C, Shipments S,
Addresses A, Code_Translations ODT, Code_Translations OT
WHERE UPPER(C.Last_Name) LIKE :Last_Name||'%'
AND UPPER(C.First_Name) LIKE :First_Name||'%'
AND OD.Order_ID = O.Order_ID
AND O.Customer_ID = C.Customer_ID
AND OD.Product_ID = P.Product_ID(+)
AND OD.Shipment_ID = S.Shipment_ID(+)
AND S.Address_ID = A.Address_ID(+)
AND O.Status_Code = OT.Code
AND OT.Code_Type = 'ORDER_STATUS'
AND OD.Status_Code = ODT.Code
AND ODT.Code_Type = 'ORDER_DETAIL_STATUS'
AND O.Order_Date > :Now - 366
ORDER BY C.Customer_ID, O.Order_ID DESC, S.Shipment_ID, OD.Order_Detail_ID;
Por eso hoy voy a mostrar un método muy usado, VST
Para empezar vamos a clasificar las partes de la consulta de la siguiente manera, vamos a crear un diagrama de tipo autómata en la que:
Las tablas usadas en la consulta serán los nodos.
Los Joins serán las líneas de conexión entre los nodos
y los filtros nos guiarán con la ruta a seguir.
De ésta manera la consulta anterior se reclasificaría así:
Tablas
Orders O,
Order_Details OD,
Products P,
Customers C,
Shipments S,
Addresses A,
Code_Translations ODT,
Code_Translations OT
Joins
OD.Order_ID = O.Order_ID
O.Customer_ID = C.Customer_ID
OD.Product_ID = P.Product_ID(+)
OD.Shipment_ID = S.Shipment_ID(+)
S.Address_ID = A.Address_ID(+)
O.Status_Code = OT.Code
OD.Status_Code = ODT.Code
WHERE UPPER(C.Last_Name) LIKE :Last_Name||'%'
AND UPPER(C.First_Name) LIKE :First_Name||'%'
AND OT.Code_Type = 'ORDER_STATUS'
AND O.Order_Date > :Now – 366
AND ODT.Code_Type = 'ORDER_DETAIL_STATUS'
y armamos el diagrama de la siguiente manera
Para que quede un diagrama como éste
El siguiente paso es ordenarlo para que nos permita determinar la ruta más discriminatoria y por lo tanto la que va a acelerar nuestra consulta:
Aquí podemos definir que la ruta mas restrictiva es ésta:
Por lo tanto nuestra consulta debe empezar por efectuar los joins a las tablas OD, O y C antes de continuar con las demás para considerarla optimizada.
Wednesday, May 21, 2014
Como ver el valor de una variable en una sentencia SQL ejecutándose en Oracle
Uno de los problemas generalizados en Oracle es el poder ver el valor de una variable incluida en una sentencia ejecutada.
¿a que me refiero con ésto?
En Oracle podemos usar una sentencia de éste tipo:
¿a que me refiero con ésto?
En Oracle podemos usar una sentencia de éste tipo:
INSERT INTO emp VALUES (:empno, :ename, :job, :sal, :deptno)
donde los valores son incluidos por parámetro en variables, en éste caso es fácil de saber cuál valor es cuál cierto?
¿Que tal cuando las variables son incluidas ... así?
INSERT INTO emp VALUES (:E1, :E2, :E3, :E4, :E5)
aunque no lo crea es un formato muy utilizado,
¿cómo sabría usted cuál variable es cuál?
La manera difícil es generar un sql parecido a éste, por cada variable:
select sesion.sid, sesion.serial#, sesion.username, sesion.sql_id, sesion.sql_child_number, optimizer_mode, hash_value, address, sql_text from v$sqlarea sqlarea, v$session sesion where sesion.sql_hash_value = sqlarea.hash_value and sesion.sql_address = sqlareLa manera fácil es con una herramienta de optimización comoel DBOptimizer de Embarcadero:Como ven aquí nos muestra todas las variables relacionadas al SQLcon sólo un click
Subscribe to:
Posts (Atom)
Exploring the Differences between Red-Teaming and Blue-Teaming in Cybersecurity: Why Red-Teaming is Sexier; but Blue-Teaming is More Crucial
When it comes to cybersecurity, there are two teams that often get confused: redteams and blueteams. Redteams are the hackers, the ones w...
-
Para trabajar en JSON se utiliza el objeto TJSONObject, de la siguiente manera: Si uno está generando la información a enviar puede usar...
-
Ayer me llegó ésta pregunta y en el momento me pregunté si Embarcadero tenía un componente para hacerlo automágicamente, la respuesta es: ...
-
Que son LiveBindings? LiveBindings es la respuesta de Delphi para acelerar la programación de varios comportamientos de manera rápida y ef...




