07 noviembre 2016

ORACLE DATABASE 12C IN-MEMORY, ¿es la respuesta de Oracle a SAP Hana?

Oracle presentó, hace algún tiempo, Oracle Database In-Memory, una nueva opción adicional a Oracle Database Enterprise Edition 12c, en respuesta al nuevo empuje hacia la industria de bases de datos residentes en memoria que ofrecen otros proveedores tanto  IBM (DB2 10.5 with BLU Acceleration) como SAP (Hana).

Comparativa Oracle vs SAP

Necesidad de negocio a cubrir
Oracle Database In-Memory
SAP HANA
¿Trabaja de manera contra aplicaciones de inteligencia de negocio previamente existentes y herramientas de "reporting"?
100 por ciento compatible con todas las herramientas Oracle y herramientas (ISV)  además de aplicaciones personalizadas por el cliente.
Mucho menos funcionalidad. Requiere nuevas aplicaciones o el registro de las aplicaciones existentes.
¿Es compatible with cloud computing, big data y data warehousing?
No hay límite de tamaño de la base de datos; utiliza dinámica de acceso aleatorio memoria (DRAM), flash, y el disco de forma transparente. No hay un gasto excesivo en el almacenamiento ya que los usuarios no tienen que poner toda su base de datos en la DRAM.
La base de datos entera debe encajar en la memoria DRAM que es costosa, y los datos que residen en sistemas DW  o en Big Data
 no caben. También consolidación de la base de datos de nube no es factible.
SAP afirma que los usuarios pueden combinar HANA con otras bases de datos como Sybase para migrar los datos desde y hacia HANA, pero esto es una arquitectura frágil, compleja y lenta.
¿Asegura la disponibilidad del dato y su seguridad?
La arquitectura de máxima disponibilidad de la base de datos Oracle  se hereda en Oracle  en memoria, mitigando las interrupciones planificadas o no. la duplicación de memoria evita el tiempo de inactividad en caso de fallo de nodo.
Al se un producto inmaduro las  funciones de alta disponibilidad faltan, por lo que lo  hacen que el tiempo de inactividad inevitable. Sin rápida recuperación de fallo de un nodo. falla de seguridad es un agravante.
¿Necesidades especiales de hardware o condiciones limitantes?
Base de Datos Oracle en memoria funciona en cualquier plataforma que ejecuta Oracle 12c de base de datos.
HANA sólo funciona en SAP en equipos informático que cuenten con la certificación  HANA basados en arquitecturas x86 . Los clientes no pueden hacer funcionar HANA en equipos no certificados.
 ¿Aprovecha el talento de de los elementos de la plantilla IT existentes (DBAs, desarrolladores)?
No se requieren nuevas APIs y los nuevos comandos DBA son mínimos, lo que hace de la base de datos Oracle en memoria algo trivial de implementar y mantener.
Debido a que Hana es una nueva "plataforma" se necesita formación para el equipo que explote esta plataforma.
¿Es escalable tanto para aplicaciones de análisis de datos o OLTP?
Base de Datos Oracle en memoria de formato dual, único que  permite la escala transparente tanto para el análisis y las cargas de trabajo OLTP corriendo juntos.
HANA utiliza un formato de columna para análisis de alto rendimiento, que tiene limitaciones arquitectónicas severas para el rendimiento y la escalabilidad OLTP.

En contraste En contraste con la bases de datos relacionales organizadas por filas, almacenadas en disco, un nuevo concepto se extendía a lo largo de los círculos académicos. Capitalizando esta tendencia y con la ayuda de unas pocas adquisiciones, principal competidor de aplicaciones empresariales tradicionales de Oracle, SAP comenzó a apostar por su propia base de datos de memoria llamada HanaMientras que SAP siempre ha sido el líder del mercado en el segmento de ERP, los clientes de SAP suelen optar por Oracle como base de datos back-end para sus aplicaciones SAP.
Ahora se está dibujando otro ecosistema para una instalación de SAP ERP:

  • Base de datos: SAP Hana
  • Middleware: SAP NetWeaver

Con todo este panorama, Oracle respondió introduciendo una capacidad revolucionaria, con una memoria caché residente columna que trabaja en conjunto con su caché fila tradicional.

Las bases de datos se suelen almacenar en discos que giran, en formato de fila y los conjuntos de datos activos se leen en la memoria basada en las memorias caché en hileras, donde los datos están protegidos por el registro de transacciones, mientras que los usuarios de negocios interactuaron a través de las aplicaciones empresariales. El rendimiento de base de datos se incrementó con los avances en el hardware, como las tecnologías de flash y el aumento de la capacidad de DRAM. Si bien esta arquitectura funcionó bien para manipulaciones de datos con sistemas OLTP y obtuvo buenos resultados para el análisis de consultas que impliquen estructuras de datos con un pequeño número de filas y el gran número de columnas. 

No estaba a la altura de almacenamiento de datos con los sistemas OLAP que lleva a cabo el análisis complejo multidimensional un gran número de filas con unas pocas columnas. Debido a esto, se tomó la costumbre de separar los sistemas de análisis,  de sistemas transaccionales cosa que hacía que diseñar un sistema de toma de decisiones fuera prácticamente imposible.


¿Que paso?

Mientras que Oracle dominaba el mercado RDBMS, otros proveedores se aprovecharon de esta oportunidad para proporcionar las bases de datos analíticas especializadas para el almacenamiento de datos, como NCR Teradata e IBM Netezza. El costo de memoriDRAM cayó, algunos proveedores, especialmente SAP, introducen nuevas tecnologías de bases de datos diseñadas para ejecutar bases de datos completas en memoria con las estructuras de datos de columna organizada. Si bien este enfoque aumenta el rendimiento de consulta de múltiples órdenes de magnitud, el rendimiento transaccional se vio afectado negativamente. SAP Sybase propuso utilizar para la transformación y carga de datos de columna organizada transaccionales en Hana para el procesamiento analítico de alto rendimiento. IBM y algunos otros jugadores de nicho también se unieron en la búsqueda para el diseño de bases de datos en memoria.

Respuesta de Oracle

Oracle se tomó un tiempo para hacer un movimiento agresivo, para proteger su producto estrella Con la arquitectura existente de Oracle completamente intacta, incluyendo la caché de fila y los mecanismos de registro de transacciones, Oracle ha diseñado una nueva caché columna que sólo existía en memoria. Como los datos organizada fila se lee desde el disco, Oracle rellena simultáneamente ambas memorias caché: 

  • Caché de fila 
  • Caché de columna

Con lo que mantiene dos copias de los datos en memoria: una fila organizada y la otra columna organizada
A continuación, el optimizador de consultas utiliza automáticamente la caché adecuado para satisfacer cada tipo de consulta, con capacidad para dos tipos de consultas dentro de una única base de datos, manteniendo al mismo tiempo la integridad transaccional a través de ambas cachés. Cuando se consulta la caché de la columna, Oracle utiliza aceleradores de hardware de vectores en las CPU para procesar conjuntos de datos completos en una sola operación atómica. En entornos RAC, cachés de la columna se copian en los nodos de alta disponibilidad. Mediante el uso de esta arquitectura, todas las funciones de base de datos anteriores continuaron el trabajo, que no requiere cambios en las aplicaciones para utilizar la caché de la columna en memoria.
Para utilizar la base de datos en memoria, todo lo que necesita es de dos sencillos pasos:

  • En primer lugar, establecer el tamaño de la caché de columna utilizando un parámetro de inicialización.
  • En segundo lugar, marcan todas las tablas y particiones para almacenar en caché utilizando un flag DDL. En este punto, las consultas se ejecutarán desde 100 a 1000 veces más rápido.

Puede mejorar aún más el DML (SQL de manejo de datos) eliminando todos los índices, excepto:

  • clave primaria
  • clave externa
  • los índices de clave de referencia

con lo que se duplicará el rendimiento transaccional.

Bonus article: El seguimiento de las instrucciones de DDL en las tablas de base de datos Oracle en caché

Cuando se emite una instrucción DDL en una tabla de base de datos Oracle en caché, esta declaración puede ser rastreado en la tabla de base de datos TT_version_DDL_L. Inmediatamente el trigger TT_version_schema-ID_DDL_T se dispara para insertar una fila en la tabla, donde la versión es un número interno de TimesTen (el producto de que deriva Oracle database caché)  y el esquema-ID es el ID de usuario al que pertenece la tabla de base de datos Oracle en caché. 

Un trigger se crea para cada usuario de base de datos Oracle que posee tablas en caché. Una tabla de seguimiento DDL se crea para almacenar instrucciones DDL emitidos en cualquier tabla de base de datos Oracle en caché. El usuario de administración de caché es propietaria de la tabla TT_version_DDL_L y el trigger TT_version_schema-ID_DDL_T.
sql
Por defecto, las sentencias DDL no realizan un seguimiento, para poder hacer lo e ha de hacer o siguiente:
  • Llamar al procedimiento almacenado ttCacheDDLTrackingConfig como el usuario administrador de caché. 

% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle"
SQL> CALL ttCacheDDLTrackingConfig('enable');


05 noviembre 2016

¿Hay vida más allá de Oracle? Ecosistema de Themyscira: Amazon Web Servicies

Entre historia y mito

Themyscira (Θεμίσκυρα) fue una antigua ciudad griega, emplazada a corta distancia de la costa sur del mar Negro, se ha recuperado en la modernidad para los cómics de Wonder Woman (publicados por DC Comics), como capital de Isla Paraíso, lugar escondido y protegido por una barrera mística caótica que impide que el mundo del Hombre penetre en ellas sin permiso y reino de las Amazonas.


Amazon Web Services: AWS
Adentrémonos en esta isla paraíso que ha revolucionado la forma de desarrollar aplicaciones y diseñar arquitecturas. 



Empecemos describiendo cada uno de los servicios que Amazon nos ofrece:
Amazon API Gateway.

Amazon API Gateway es un servicio totalmente administrado que facilita a los desarrolladores la creación, la publicación, el mantenimiento, la monitorización y la protección de API a cualquier escala. Con tan solo unos clics en la consola de administración de AWS, puede crear un API que haga las veces de puerta delantera para que las aplicaciones obtengan acceso a datos, lógica de negocio o funcionalidades desde sus servicios de back-end, como cargas de trabajo ejecutadas en Amazon Elastic Compute Cloud (Amazon EC2), código ejecutado en AWS Lambda o cualquier aplicación web. 



Amazon API Gateway administra todas las tareas involucradas en la aceptación y el proceso de llamadas de API simultáneas, entre ellas:
  • La administración del tráfico
  • El control de autorizaciones y acceso
  • La monitorización
  • La administración de la versión de API. 

AWS Lambda functions


AWS Lambda es un servicio de computación sin servidores que ejecuta el código como respuesta a eventos y administra automáticamente los recursos de computación subyacentes. Puede usar AWS Lambda para ampliar otros productos de AWS con lógica personalizada o puede crear sus propios servicios back-end:
  • Administración de la seguridad. 
  • Administración del desempeño. 
  • El escalado de AWS. 

AWS Lambda puede ejecutar código automáticamente en respuesta a varios eventos, como la modificación de objetos en buckets de Amazon S3 o la actualización de tablas en Amazon DynamoDB.

Lambda ejecuta el código en una infraestructura informática de alta disponibilidad y ejecuta la administración integral de los recursos informáticos, incluido el mantenimiento del servidor y del sistema operativo, el aprovisionamiento de capacidad y el escalado automático, la implementación de parches de seguridad y código, así como la monitorización y los registros. Lo único que tiene que hacer es proporcionar el código.


Amazon S3 buckets.

Amazon S3 es almacenamiento para Internet. Es un servicio de almacenamiento sencillo que ofrece a los desarrolladores de software una infraestructura de almacenamiento de datos de gran escalabilidad, fiable y de baja latencia con costos muy bajos.

Una infraestructura de almacenamiento de datos escalable y sofisticada como la de Amazon no estaba al alcance de los desarrolladores pequeños. Amazon S3 permite a cualquier desarrollador aprovechar los beneficios propios de Amazon de escala masiva sin una inversión inicial y sin poner en riesgo el desempeño. Ahora los desarrolladores pueden innovar sabiendo que, sin importar el éxito que alcancen sus negocios, será asequible y sencillo garantizar que siempre se pueda obtener acceso a sus datos con rapidez, que siempre estén disponibles y que estén seguros.

El volumen total de datos y el número de objetos que puede almacenar son ilimitados. El tamaño de los objetos individuales de Amazon S3 puede variar entre un mínimo de 0 bytes y un máximo de 5 terabytes. El objeto más grande que se puede cargar en un solo PUT es de 5 gigabytes. Para objetos de más de 100 megabytes, los clientes deben plantearse el uso de la capacidad de carga multiparte.

Amazon S3 es un sencillo almacenamiento de objetos basado en claves. Cuando almacena datos, asigna una clave de objeto única que puede utilizarse posteriormente para recuperar los datos. Las claves pueden ser cualquier cadena, y pueden establecerse de forma que imiten atributos jerárquicos.

Amazon S3 ofrece una sencilla interfaz de servicios web REST basada en estándares, que está diseñada para funcionar con cualquier conjunto de herramientas de desarrollo basado en Internet. Las operaciones se han hecho sencillas de forma intencionada para facilitar la tarea de adición de nuevos protocolos de distribución y capas funcionales.

Amazon DynamoDB non-relational database
DynamoDB permite el almacenamiento, la realización de consultas y la actualización de documentos. Mediante el uso de AWS SDK, puede escribir aplicaciones que almacenen los documentos JSON directamente en tablas de Amazon DynamoDB. Esta función reduce la cantidad de código nuevo que ha de escribirse para insertar, actualizar y recuperar documentos JSON y realizar operaciones potentes en la base de datos, como consultas JSON anidadas, que pueden efectuarse con tan solo unas líneas de código.

Amazon DynamoDB soporta estructuras de datos de valor de clave. Cada elemento (fila) constituye una pareja de valor de clave, en la que la clave principal es el único atributo necesario para los elementos de la tabla e identifica a cada uno de ellos. DynamoDB no contiene esquemas. Cada elemento puede poseer cualquier número de atributos (columnas). Además de consultar la clave principal, puede consultar atributos clave no principales utilizando los índices secundarios globales e índices secundarios locales.



Amazon DynamoDB ofrece un desempeño y escalado del almacenamiento perfectos mediante el API y la consola de administración de AWS. Prácticamente no existen límites en cuanto al rendimiento o almacenamiento que se pueden solicitar en un momento determinado.

Amazon DynamoDB ofrece alta disponibilidad con replicación de datos automática y sincrónica en tres instalaciones incluidas dentro de una misma región. De este modo, protege sus datos ante posibles errores en máquinas individuales o en las instalaciones.

Para los que nos gusta andar husmeando con tecnología hay una versión descargable  de Amazon DynamoDB aquí.

Amazon DynamoDB se integra con AWS Lambda para proporcionar activadores. Mediante los activadores, puede ejecutar automáticamente una función personalizada que detecte los cambios a nivel de elemento en una tabla de DynamoDB. Son nuetros viejos trigger de bases de datos relacionales

Existe una consola de administración de AWS para DynamoDB le permite crear, actualizar, eliminar y consultar tablas, ajustar el desempeño y definir alarmas con solo unos clics del mouse. Además, DynamoDB soporta una amplia funcionalidad con un número reducido de API. 
Amazon Cognito

Amazon Cognito le permite agregar el registro y el inicio de sesión de forma sencilla a sus aplicaciones web y móviles. Con Amazon Cognito, también tiene las opciones de autenticar a los usuarios a través de proveedores de identidad social, como Facebook, Twitter o Amazon, con soluciones de identidad SAML o a través de su propio sistema de identidad (IBM Tivoli, Oracle Identity Manager, ...). Además, Amazon Cognito le permite guardar datos de forma local en los dispositivos de los usuarios, lo que permite que sus aplicaciones funcionen incluso cuando los dispositivos están fuera de línea. A continuación, puede sincronizar los datos entre los distintos dispositivos de los usuarios para que disfruten de una experiencia uniforme con las aplicaciones independientemente del dispositivo que utilicen.

04 noviembre 2016

A DROP of humour: Clouds elsewhere

 


¿Y tú de quien eres?: SQL para mostrar consultas jerárquicas en Oracle



En algunas ocasiones, es necesario recuperar los datos de una tabla cuya relación es recursiva, para mostrar pertenencias y/o jerarquías (por ejemplo litados de reportes de organizaciones, desglosadas por departamentos, direcciones, etc). Tales jerarquías generalmente son representadas a través de estructuras tipo árbol, en donde la raíz (o nodo principal) tiene ramas (nodos descendientes) y cada una de estas ramas puede a su vez generar más ramas, hasta llegar a un punto final en donde no hay mas divisiones. Esos nodos terminales son pues llamados también hojas.



Para el ejemplo, supongamos que se tiene una tabla donde se tiene almacenados los datos familiares de personas en una tabla como la siguiente:

idPersona
Nombres
hijoDe
1
Juan Carlos

2
Luis
5
3
Pedro
5
4
Jaime Alberto
9
5
Olga María
1
6
Marta Edith
8
7
Lucía
9
8
Nelly
1
9
Felipe
8
10
Edgar Nelson
8

La anterior tabla, almacena los datos acerca de los padres de cada persona. De esta manera, es posible construir un árbol como el siguiente:


Desde la versión 9i, el lenguaje sql de oracle provee la posibilidad de recuperar los datos de una tabla, vista, o tabla externa, simulando el recorrido de un árbol, el cual puede hacerse comenzando por la raía hasta llegar a todas las hojas, o desde las hojas hasta llegar a la raíz.

Por lo tanto, La consulta:

SELECT nombres, LEVEL
FROM persona
START WITH nombres='Juan Carlos'
CONNECT BY PRIOR idPersona = hijode;

Retornará el nombre de todas las personas y el id del respectivo padre; empezando por el nombre Juan Carlos. La Pseudocoluma LEVEL indica el nivel en el que se encuentra el registro, tras haber construido el arbol. START WITH indica el registro raiz; es decir, donde empieza el arbol. CONNECT BY PRIOR indica las columnas en las cuales existe la relación padre-hijo

Salida:


Si desea recuperar la descendencia a partir de “Felipe”, la consulta sería:



Obsérvese que en la anterior consulta el valor de LEVEL para “Felipe” es igual a 1, ya en el árbol que construye esta consulta, el nodo “Felipe” se encuentra en el primer nivel.

Si por el contrario, se desean conocer los padres de Felipe, la consulta sería:




Obsérvese en el anterior ejemplo, que el recorrido se hizo de abajo hacia arriba (en el árbol). El orden de las columnas en la clausula CONNECT BY PRIOR, especifica el orden del recorrido. En el primer ejemplo se tenía:CONNECT BY PRIOR idPersona=hijoDe y se tuvo el recorrido del árbol de arriba a abajo. En el ultimo ejemplo se tuvo CONNECT BY PRIOR hijoDe =idPersona, y el recorrido fue de abajo hacia arriba.

De igual manera, desde la versión 9i, fue incluida la función SYS_CONNECT_BY_PATH(), que concatena los valores de las ramas del árbol en el recorrido.

El siguiente es un ejemplo de su utilización:




Es muy fácil entonces hacer consultas jerárquicas con la utilización de la cláusula STARA WITH y CONNECT BY y la función SYS_CONNECT_BY_PATH.

NBA y COALESCE


La función COALESCE recibe varios argumentos y retorna la primer expresión distinta de nulo de la lista de dichos argumentos.


  • Sintaxis


COALESCE ( expression [ ,...n ] )


  • Argumentos


expression: Puede ser una expresión de cualquier tipo.


  • Tipos de valor devueltos

Devuelve el tipo de datos de expression con la precedencia de tipo de datos más alta.
Nota: Si todos los argumentos son NULL, COALESCE devuelve NULL.
Al menos uno de los valores NULL debe ser NULL con tipo.

COALESCE(expression1,...n) es equivalente a esta función CASE:

CASE
WHEN (expression1 IS NOT NULL) THEN expression1
...
WHEN (expressionN IS NOT NULL) THEN expressionN
ELSE NULL
END

ISNULL y COALESCE, aunque son equivalentes, pueden comportarse de forma diferente.
Una expresión que contenga ISNULL con parámetros diferentes de NULL se considera que es NOT NULL, mientras que las expresiones que contienen COALESCE con parámetros que son diferentes de NULL se consideran NULL.

En este ejemplo, la tabla NBA_TEAM_TICKETS_SOLDS incluye tres columnas con información acerca del precio de entradas vendidas por cada equipo de la NBA.
Para determinar el importe total por cada equipo, utilice la función COALESCE para obtener sólo los valores no NULL encontrados en hourly_wage, price y commission.



CREATE TABLE NBA_TEAM_TICKETS_SOLDS

(

party_day_wage number NULL,

price number NULL,

commission number NULL,

num_sales int NULL 

);

/

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(10.00, NULL, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(20.00, NULL, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(30.00, NULL, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(40.00, NULL, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, 10000.00, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, 20000.00, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, 30000.00, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, 40000.00, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, NULL, 15000, 3);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, NULL, 25000, 2);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, NULL, 20000, 6);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, NULL, 14000, 4);

/

SELECT CAST(COALESCE(party_day_wage * 40 * 52, price, commission * num_sales) AS money) AS 'Total sales' FROM NBA_TEAM_TICKETS_SOLDS;
/

Total Sales

------------

20800.0000

41600.0000

62400.0000

83200.0000

10000.0000

20000.0000

30000.0000

40000.0000

45000.0000

50000.0000

120000.0000


¿Certificarte en Oracle? Aquí tienes su portfolio de certificaciones en Oracle

Con mi reciente estado laboral, he estado mirando varias certificaciones en bases de datos y como no, Oracle y MySQL son mis favoritas.
Aquí os dejo todas las que hay y señaladas en amarillo, las que planeo realizar, comenzando por SQL y PLSQL 

·         Database Application Development
o    Oracle Application Express (Oracle APEX)

o    SQL y PL/SQL

·         MySQL
o    MySQL Database Administration

o    MySQL Developer

·         Oracle Database
o    Database Cloud

o    Oracle Database 11g

o    Oracle Database 12c

o    Oracle Spatial 11g