Guía Tecnológica de Caché

Anuncio
Guía Tecnológica de Caché
Contenidos
Introducción
Capítulo 1
Diseño de modelo de datos - Acceso relacional o mediante objetos
Tecnología relacional
Tecnología y bases de datos basadas en objetos
Acceso mediante objetos frente a acceso relacional
Visión general del modelo de datos de objetos y la programación orientada a objetos de Caché
Conceptos clave sobre objetos
¿Por qué elegir objetos para el modelo de datos?
Almacenamiento de datos de objetos... Y acceso relacional
No sólo SQL
Capítulo 2
Servidor de datos multidimensional de Caché
Acceso integrado a base de datos
Modelo de datos multidimensional
Acceso SQL
Caché Objects
Indexación de bitmaps transaccional
Búsqueda de texto con detección de términos de interés
InterSystems iKnow Technology
Enterprise Cache Protocol para sistemas distribuidos
Tolerancia ante fallos
Modelo de seguridad
Capítulo 3
Servidor de Aplicaciones de Caché
Máquina Virtual de Caché y lenguajes de script
Caché ObjectScript
Basic
MV Basic
C++
Java
Caché eXTreme for Java
Caché y .NET
Caché y XML
Caché y Web Services
Caché y MultiValue
Migración de aplicaciones a Caché
Capítulo 4
Creación rápida de aplicaciones web completas con la tecnología InterSystems Zen
Tecnología CSP
Arquitectura de clases de las páginas Web
Zen y páginas Web basadas en componentes
1
4
5
6
6
6
8
8
9
9
10
10
11
14
16
18
19
20
22
25
27
30
30
32
38
40
40
40
41
42
43
44
46
47
48
48
49
50
Introducción
El mundo informático ha entrado en la era "post­relacional"
Hace 30 años, las bases de datos relacionales se
anunciaban como una gran innovación. En lugar de
las bases de datos monolíticas heredadas, cada una
con su esquema de datos exclusivo, los datos se
podían almacenar en formato tabular y cualquiera
que supiese SQL podía acceder a ellos. Las bases de
datos relacionales tuvieron mucho éxito y el lenguaje SQL se convirtió en un estándar común para
acceder a las bases de datos. Sin embargo, como
suele ser habitual con las viejas tecnologías, las
bases de datos relacionales tienen limitaciones que
reducen su aplicabilidad al mundo actual, principalmente en los ámbitos de rendimiento/escalabilidad,
facilidad de uso y adaptación con las tecnologías de desarrollo de hoy en día.
El uso y complejidad de las aplicaciones informáticas se han disparado y los sistemas actuales
necesitan cada vez más requisitos de proceso, superando las capacidades de la tecnología relacional. Muchas de las aplicaciones clave que requerían gran rendimiento y escalabilidad nunca
realizaron la transición hacia las bases de datos relacionales y hoy, incluso las aplicaciones más
sencillas, están comenzando a aproximarse a los límites de la tecnología relacional tradicional.
La "diferencia de impedancia" entre las bases de datos relacionales y las tecnologías de desarrollo
actuales se ha convertido en un problema grave, complicando el desarrollo y aumentando las
posibilidades de fallo. Aunque la sencillez de las estructuras tabulares admite un lenguaje de consulta (SQL) elegante, es difícil descomponer las estructuras de datos del mundo real en simples
filas y columnas. El resultado es un enorme número de tablas cuyas relaciones son difíciles de
recordar y utilizar; las filas y columnas son sencillas, pero no así la necesidad omnipresente de
programar left outerjoins, procedimientos almacenados y triggers.
Las aplicaciones modernas suelen escribirse utilizando tecnología de objetos, que ofrece un
método más rápido e intuitivo de describir y utilizar la información. El desarrollo es más rápido y
aumenta la fiabilidad. Desafortunadamente, la naturaleza de los objetos es incompatible con las
bases de datos relacionales. Las ventajas de la tecnología de objetos se reducen cuando los objetos de base de datos resultantes tienen que trasladarse a un modelo relacional bidimensional.
Las aplicaciones actuales de proceso de transacciones tienen unos requisitos que superan las
posibilidades de la tecnología relacional: deben abarcar grandes redes, dar servicio a miles
de clientes y seguir proporcionando un rendimiento excelente, compatibilidad con la Web y
operaciones sencillas con bajo coste. ¡Y tienen que desarrollarse rápidamente!
1
Presentamos Caché.
Caché es una nueva generación de tecnología de bases de datos de alto rendimiento. Combina una
base de datos de objetos, SQL de altas prestaciones y un potente acceso a datos multidimensionales;
todos ellos pueden acceder simultáneamente a los mismos datos. Los datos sólo se describen una
vez en un único diccionario de datos integrado, y está disponible instantáneamente mediante todos
los métodos de acceso. Caché proporciona unos niveles de rendimiento, escalabilidad, programación rápida y facilidad de uso que la tecnología relacional no puede alcanzar.
Pero Caché es mucho más que pura tecnología de bases de datos. Caché incluye un Servidor de
Aplicaciones con posibilidades avanzadas de programación de objetos, la capacidad de integrarse
fácilmente con una gran variedad de tecnologías y un entorno de ejecución de muy alto rendimiento con tecnología exclusiva de almacenamiento de datos en memoria intermedia caché.
Caché incorpora varios lenguajes de scripts: Caché ObjectScript, un lenguaje de programación
potente, aunque fácil de aprender, orientado a objetos; Caché Basic, un superconjunto del lenguaje
de programación Basic, ampliamente extendido, que incluye extensiones de acceso potente a los
datos y de tecnología de objetos; y Caché MV Basic, una variante de Basic utilizada por aplicaciones
MultiValue (a las que a veces se hace referencia como aplicaciones Pick). Otros lenguajes, como
Java, C# y C++ tienen soporte mediante llamada directa o mediante otras interfaces, que incluyen
ODBC, JDBC, .NET y una interfaz de objetos proporcionada por Caché que permite el acceso a la
base de datos Caché y a otras características de Caché como propiedades y métodos.
Caché también va más allá de las bases de datos tradicionales con la incorporación de un
entorno productivo para el desarrollo de sofisticadas aplicaciones basadas en navegador (Web).
La tecnología Caché Server Pages (CSP) permite desarrollar y ejecutar rápidamente páginas Web
generadas dinámicamente. Miles de usuarios Web simultáneos pueden acceder a las aplicaciones
de bases de datos, incluso con hardware de bajo coste.
En el caso de las aplicaciones no basadas en navegador tipo Internet, la interfaz de usuario suele
programarse en alguna de las tecnologías cliente de interfaz de usuario conocidas, como VB,
Delphi, Java o C++. Los mejores resultados (programación más rápida, mayor rendimiento y menor
mantenimiento) suelen obtenerse realizando el resto del desarrollo dentro de Caché. Sin embargo,
Caché también proporciona niveles muy altos de interoperatividad con otras tecnologías y soporta
todas las herramientas de desarrollo utilizadas más frecuentemente, disponiendo de esta forma de
un amplio rango de metodologías de desarrollo.
2
3
Capítulo 1
Modelo de datos - Acceso relacional o mediante objetos
Al comenzar a diseñar una nueva aplicación, los desarrolladores deben decidir qué enfoque darle al
modelo de datos. Para la mayoría, se trata de elegir entre el modelo de datos tradicional como tablas
relacionales y el enfoque más reciente del modelo de objetos. Frente a la necesidad de manejar
datos complejos, muchos desarrolladores creen que el modelo de objetos resulta más efectivo.
Por supuesto, al trasladar una aplicación existente a Caché, el primer paso es migrar el modelo
de datos existente. Hay formas fáciles de importar modelos de datos de varias representaciones
relacionales o de objetos, de forma que el resultado sea una definición de datos estándar de
Caché. Una vez migrados a Caché, se puede acceder simultáneamente a los datos como objetos,
tablas relacionales y arrays multidimensionales.
Caché soporta acceso a datos SQL y de objetos, y hay momentos en los que cada uno de ellos
resulta adecuado. Para comprender los usos de cada modelo de datos y por qué el de objetos es
el preferido normalmente por los desarrolladores modernos, sería útil conocer cómo y por qué
se ha desarrollado cada uno de ellos.
4
Tecnología relacional
En los primeros días de la informática, el proceso de la información se realizaba en enormes sistemas mainframe y el acceso a los datos estaba, en gran medida, limitado a los profesionales de
la TI. Las bases de datos tendían a ser de cosecha propia, y recuperar los datos de forma efectiva
requería un profundo conocimiento de la base de datos. Si un usuario quería un informe especial, generalmente tenía que solicitarlo a un departamento central, siempre saturado de trabajo,
y que normalmente no estaba disponible a tiempo para influir sobre las decisiones.
Aunque la tecnología relacional se desarrolló originalmente en la década de 1970 en mainframes, continuó en gran parte como proyecto de investigación hasta sus primeras apariciones
en la década de 1980 en miniordenadores. Con la llegada de los PCs, el mundo pasó a una era de
la informática más "centrada en el usuario” con generadores de informes más agradables para el
usuario basados en SQL (el lenguaje de consulta introducido por la tecnología relacional). Los
usuarios ya podían producir sus propios informes y consultas ad-hoc de la base de datos, y el
uso de la tecnología relacional se disparó.
El lenguaje SQL permite utilizar un lenguaje uniforme para hacer preguntas sobre una amplia variedad de datos. SQL funciona estructurando
los datos de una forma muy sencilla y estándar: una tabla bidimensional
con filas y columnas. Aunque este sencillo modelo de datos permitía la
creación de un lenguaje de consulta elegante con el que hacer preguntas,
llevaba consigo un pesado lastre. La complejidad inherente a las relaciones entre datos del mundo real no se adapta de forma natural al simple formato de filas y columnas, así que los datos a menudo se fragmentan en muchas tablas que deben unirse ("join") para llevar a cabo incluso tareas muy sencillas. Esto provoca dos problemas: a) puede resultar
muy complicado escribir las consultas debido a la necesidad de hacer
uniones ("join") de muchas tablas (que a menudo tienen uniones externas complejas), y b) la carga general de proceso necesaria cuando las
bases de datos relacionales tienen que manejar datos complejos puede
ser enorme.
SQL se ha convertido en el estándar para la interacción con las bases de
datos y para las herramientas de generación de informes. Sin embargo,
es importante señalar que aunque SQL surgió a partir de las bases de
datos relacionales, no tiene porque estar restringido por ellas. Caché
soporta SQL estándar como lenguaje de consulta y actualización utilizando una tecnología de base de datos multidimensional mucho más
sólida y se ha ampliado para incluir posibilidades de objetos.
5
Capítulo 1
Tecnología y bases de datos basadas en objetos
La programación de objetos y las bases de datos de objetos son el resultado práctico del trabajo
de simular las actividades complejas del cerebro. Se ha observado que el cerebro es capaz de
almacenar tipos de datos muy distintos y complejos y a pesar de ello manipular de forma habitual esa información aparentemente distinta. Para dar soporte a esa simulación, ha sido necesario implementar comportamientos muy complejos en los programas, ocultando a la vez esa
complejidad, lo que permite una lógica más sencilla, generalizada y comprensible con funcionalidad adaptable y reutilizable. Evidentemente, estas características están al nivel de las aplicaciones actuales más avanzadas, y una tecnología que permite a los desarrolladores trabajar de
forma natural, más similar al pensamiento humano, supone una enorme ventaja.
Acceso mediante objetos frente a acceso relacional
En la tecnología de objetos, la complejidad de los datos está contenida en el objeto, y se accede a
los datos mediante una interfaz sencilla y uniforme. En contraste, la tecnología relacional también proporciona una interfaz sencilla y uniforme, pero como no hace nada para gestionar la
complejidad de los datos del mundo real, el usuario o programador es el responsable de manejar
esa complejidad.
Dado que los objetos permiten crear modelos de datos complejos con facilidad, la programación
de objetos es la mejor opción para programar aplicaciones complejas. De igual forma, el acceso a
objetos de la base de datos es la mejor opción para insertar datos y actualizar la base de datos
(es decir, para el proceso transaccional).
Caché complementa el acceso a los objetos con un lenguaje de consulta SQL ampliado a objetos.
SQL es un potente lenguaje para buscar en una base de datos, y es ampliamente utilizado en
herramientas de generación de informes. Sin embargo, creemos que SQL es más adecuado para
dicho fin (consultas e informes) que para el proceso transaccional (en el que se desenvuelve con
lentitud y a menudo con poca eficacia). Las extensiones de Caché SQL para objetos eliminan
gran parte de la incómoda sintaxis de uniones, facilitando aún más el uso de SQL.
Visión general del modelo de datos de objetos y la programación
orientada a objetos de Caché
El modelo de objetos de Caché se basa en el estándar ODMG (Object Database Management
Group, Grupo de gestión de bases de datos de objetos) y soporta muchas características avanzadas, incluyendo la herencia múltiple.
La tecnología de objetos intenta tratar y utilizar la información como lo hace la mente humana. A
diferencia de las tablas relacionales, los objetos incorporan tanto los datos como el código. Por
ejemplo, un objeto Factura podría tener como datos un número de factura, un importe total y un
código como Print().
Conceptualmente, un objeto es un paquete que incluye los valores de los datos de dicho objeto
("propiedades") y una copia de todo su código ("métodos"). Los métodos de un objeto envían
mensajes para comunicarse con otros métodos. Para reducir el espacio de almacenamiento, es
6
habitual que los objetos de la misma clase compartan la misma copia del código (por ejemplo,
sería poco realista que cada objeto Factura tuviera su propia copia de código). Además, en
Caché, las llamadas a métodos suelen generar llamadas eficientes a funciones, en lugar de
aumentar la sobrecarga que supone pasar mensajes. Sin embargo, estas técnicas de implementación quedan ocultas al programador; así que siempre es más adecuado pensar en términos de objetos pasando mensajes.
¿Cuál es la diferencia entre un objeto y una clase? Una clase es la estructura y el código definitorio proporcionados por el programador. Incluye una descripción de la naturaleza de los datos y
de cómo se almacenan, además de todo el código, pero no contiene ningún dato. Un objeto es
una "instancia" particular de una clase. Por ejemplo, la factura Nº 123456 es un objeto de la
clase Factura.
Nombre:
Los datos se almacenan
utilizando un tipo de
datos Nombre
DNI:
Los datos pueden ser de un
tipo de datos sencillo,
como un entero, o un tipo
de datos más complejo
definido por el progra­
mador, como una cadena
de 9 dígitos que coincida
con el patrón: NNN­NN­
NNNN.
Dirección:
Este es un ejemplo del
modo en el que pueden
embeberse los objetos
dentro de otros objetos.
En este ejemplo,
Dirección es un objeto
embebido que contiene
las propiedades Calle y
Ciudad.
RepCuenta:
RepCuenta es una propiedad que
conecta un Cliente con un objeto
Comercial en una relación muchos­
con­uno (muchos Clientes con un
Comercial). A diferencia de un obje­
to embebido, el objeto relacionado
tiene su propio identificador o id en
la base de datos y se almacena por
separado utilizando dicho id. Ese id
puede utilizarse para acceder
directamente a ese Comercial sin
acceder al Cliente. En Caché la sin­
taxis para acceder a un objeto
embebido o relacionado es la
misma (por ejemplo,
Cliente.Dirección.Ciudad y
Cliente.RepCuenta.Nombre utilizan
la misma "sintaxis de puntos").
Facturas:
Un Cliente tiene una colección de
Facturas, cada una de ellas es un
objeto complejo almacenado de
forma separada con su propio id
de base de datos. En este ejemplo
existe una relación uno­con­
muchos entre los Clientes y las
Facturas (un Cliente con muchas
Facturas) utilizando una relación
padre­hijo (no pueden existir
Facturas sin un Cliente, pero sí
puede existir un Cliente sin
Facturas). También es posible una
colección de objetos embebidos.
7
Capítulo 1
Conceptos clave sobre objetos
Las ventajas de Caché
Caché está totalmente preparado
para objetos y proporciona toda la
potencia de la tecnología de objetos a los desarrolladores de aplicaciones de proceso transaccional de
alto rendimiento.
Modelo de datos intuitivo:
La tecnología de objetos permite a
los desarrolladores pensar en la
información y utilizarla (incluso
información tremendamente compleja) de forma sencilla y cercana a
la realidad, acelerando el proceso
de desarrollo de la aplicación.
Desarrollo rápido de aplicaciones:
Los conceptos de encapsulación,
herencia y polimorfismo de objetos permiten reutilizar, volver a
planificar y compartir clases entre
aplicaciones, y los programadores
pueden aprovechar su trabajo para
otros muchos proyectos.
La herencia es la capacidad de que una clase de objetos proceda de otra.
La nueva clase (una subclase) contiene todas las propiedades y métodos
de su superclase, así como propiedades y métodos adicionales exclusivos
de ella. Se podría decir que los objetos de la subclase tienen una relación
"es un/a" con su superclase. Por ejemplo, un perro "es un" mamífero,
luego tiene sentido que la clase Perro herede todas las propiedades y
métodos de la clase Mamífero además de tener propiedades y métodos
adicionales como un NúmIDPerro. Una subclase también puede modificar
una definición heredada (por ejemplo, el método Print() para una subclase
de la clase Factura puede ser distinto del método Print() de Factura). La
herencia favorece la reutilización de código y facilita la incorporación de
mejoras generales.
La herencia múltiple significa que una subclase puede proceder de más de
una superclase. Por ejemplo, un perro "es un" mamífero y "es una" mascota,
así que la clase de objeto "Perro" puede heredar atributos tanto de la clase
"Mamífero" como de la clase "Mascota".
Encapsulación significa que los objetos se pueden contemplar como una
especie de "caja negra". Cualquier método puede acceder a las propiedades y
métodos públicos, mientras que a las propiedades y métodos privados sólo
tienen acceso los métodos de la misma clase. De este modo la aplicación no
necesita conocer el funcionamiento interno de un objeto; sólo maneja las
propiedades y métodos públicos. La potencia de la encapsulación está en que
el programador puede mejorar el funcionamiento interno de una clase sin
que afecte al resto de la aplicación.
Polimorfismo hace referencia al hecho de que los métodos utilizados en varias clases pueden
compartir una interfaz común, incluso si su implementación subyacente es distinta. Por ejemplo,
supongamos que todas las clases Carta, Etiqueta de correo y Placa de identidad contienen un
método denominado Imprimir. Para imprimir, la aplicación no necesita saber a qué tipo de objeto está accediendo; simplemente llama al método Imprimir del objeto.
¿Por qué elegir objetos para el modelo de datos?
Para las nuevas aplicaciones de base de datos, la mayoría de los desarrolladores prefiere utilizar
tecnología de objetos porque pueden desarrollar aplicaciones complejas de una forma más rápida y
modificarlas posteriormente con facilidad. La tecnología de objetos proporciona muchas ventajas:
■ Los objetos soportan una estructura de datos más completa que describe de forma más
natural los datos del mundo real.
■ Programar es más sencillo; es más fácil hacer el seguimiento de lo que se está haciendo y
de lo que se está modificando.
8
■ Las versiones personalizadas de las clases pueden sustituir fácilmente a las estándares, facilitando la personalización de una aplicación.
■ El enfoque de "caja negra" en la encapsulación significa que el programador puede mejorar el
funcionamiento interno de los objetos sin que afecte al resto de la aplicación.
■ Los objetos proporcionan un método sencillo de conectar distintas tecnologías y distintas
aplicaciones.
■ Java y las interfaces de usuario basadas en GUI utilizan de forma natural la tecnología de objetos.
■ Muchas de las nuevas herramientas incorporan tecnología de objetos.
■ Los objetos proporcionan un buen aislamiento entre la interfaz de usuario y el resto de la
aplicación. De este modo, cuando es necesario adoptar una nueva tecnología de interfaz de
usuario (quizás alguna tecnología futura aún no prevista) se puede reutilizar la mayor parte
del código.
Almacenamiento de datos de objetos ...
Desafortunadamente, aunque muchas aplicaciones se escriben ahora con lenguajes de programación de
objetos, se intenta implementar a la fuerza los datos de los objetos en tablas relacionales planas. Esto
afecta seriamente a las ventajas de la tecnología de objetos.
Caché proporciona una estructura de datos multidimensional que almacena de forma natural datos
complejos de objetos. El resultado: más rapidez en el acceso a los datos y en la programación.
... Y acceso relacional
Por supuesto, muchas herramientas (como los generadores de informes) utilizan SQL, no tecnología
de objetos, para acceder a los datos.
Una característica única de Caché es que siempre que se define una clase de objetos de base de
datos, proporciona automáticamente acceso SQL completo a esos datos. Por tanto, sin trabajo adicional, las herramientas basadas en SQL funcionarán inmediatamente con los datos de Caché, manteniendo el alto rendimiento del Servidor de Datos Multidimensional de Caché.
El proceso inverso también es válido. Cuando se importa una definición DDL de una base de datos
relacional, Caché genera automáticamente una descripción de objetos de los datos, habilitando su
acceso inmediato como objetos y a través de SQL.
La Arquitectura de Datos Unificada de Caché mantiene sincronizadas estas vías de acceso; sólo hay
una descripción de datos que editar.
No sólo SQL
Caché también permite un acceso directo a sus estructuras de datos multidimensionales. Gracias a
esto Caché puede utilizarse como una base de datos NoSQL o “No sólo SQL” en situaciones en las
que sea deseable hacerlo.
9
Capítulo 2
Servidor de datos multidimensional de Caché
La base de datos de alto rendimiento de Caché utiliza un motor de datos multidimensional que permite el almacenamiento eficaz y compacto de datos en una estructura de datos compleja. Los objetos y SQL se implementan especificando un diccionario de datos unificado que define las clases y
tablas y proporciona un mapeo con las estructuras multidimensionales, mapeo que puede generarse automáticamente. Caché también permite acceso directo a los datos multidimensionales.
Acceso integrado a base de datos
Multidimensional Access
Caché proporciona a los programadores la libertad de almacenar y
acceder a los datos mediante acceso a objetos, SQL o acceso directo a las estructuras multidimensionales. Independientemente del
método de acceso, todos los datos de la base de datos de Caché se
almacenan en las arrays multidimensionales.
Una vez almacenados los datos, se pueden utilizar simultáneamente los tres métodos de acceso sobre los mismos datos, con
concurrencia total.
Una característica única de Caché es su Arquitectura de Datos
Unificada. Siempre que se define una clase de objetos en la base de
datos, Caché genera automáticamente una descripción relacional
SQL de dicha clase. De forma similar, cuando se importa en el Diccionario de Datos una descripción
DDL de una base de datos relacional, Caché crea automáticamente junto con la descripción relacional,
la definición de la clase equivalente, lo que posibilita el acceso inmediato como objetos. Caché
mantiene estas descripciones unidas: en la práctica existe una única definición de datos. El programador puede editar y ver el diccionario tanto desde la perspectiva de objeto como de tabla relacional.
Caché crea automáticamente un mapeo de cómo se almacenan los objetos y tablas en las estructuras
multidimensionales, aunque también el programador puede controlar el mapeo explícitamente.
Las ventajas de Caché
Flexibilidad: Los modos de acceso a los datos de Caché (Objetos, SQL y Directo) se pueden
utilizar concurrentemente sobre los mismos datos. Esta flexibilidad ofrece a los programadores la libertad de pensar en los datos de la forma que tenga más sentido y utilizar el
método de acceso que mejor se adapte a las necesidades de cada programa.
Menos trabajo: La Arquitectura de Datos Unificada de Caché describe automáticamente
los datos como objetos y como tablas con una sola definición. No es necesario codificar las
transformaciones, facilitando el desarrollo y mantenimiento de las aplicaciones.
Afianzar los conocimientos y aplicaciones existentes: Los programadores pueden
ampliar sus conocimientos relacionales e ir introduciendo capacidades de objeto en aplicaciones existentes a medida que evolucionan.
10
Modelo de datos multidimensional
El núcleo de la base de datos de Caché es un motor de datos multidimensional tremendamente
potente. Los lenguajes de script integrados en Caché proporcionan acceso directo a las estructuras
multidimensionales, ofreciendo el mayor rendimiento y el rango más amplio de posibilidades de
almacenamiento, y muchas aplicaciones se implementan en su totalidad utilizando directamente
este motor de datos. El "acceso global" directo se suele utilizar cuando existen estructuras poco
comunes y muy especializadas y no hay necesidad de proporcionar acceso mediante objetos o SQL
a dichas estructuras, o cuando se necesita el mayor rendimiento posible.
No existe ningún diccionario de datos, y por tanto ninguna definición de datos, para el motor de
datos multidimensional.
Estructura de datos multidimensional compleja
Las arrays multidimensionales de Caché se denominan "globals". Los datos se pueden almacenar en
un global con cualquier número de subíndices. Además, los subíndices son independientes y pueden
contener cualquier tipo de datos. Un subíndice podría ser un entero, como 34, mientras que otro
podría ser un nombre significativo, como "ArtículosLínea", incluso en el mismo nivel de subíndice.
Por ejemplo, una aplicación de inventario de stock que proporcione información sobre artículo,
talla, color y estampado podría tener una estructura como la siguiente:
^Stock(artículo,talla,color,estampado) = cantidad
Algunos datos de ejemplo:
^Stock("vestido",4,"azul","floral")=3
Con esta estructura es muy sencillo determinar si hay vestidos azules de la talla 4 con estampado
floral, simplemente accediendo a ese nodo de datos. Si un cliente desea un vestido de la talla 4
pero no está seguro del color y del estampado, es fácil mostrar una lista de todos ellos pasando
por todos los nodos de datos bajo:
^Stock("vestido",4).
En este ejemplo, todos los nodos de datos eran de naturaleza similar, (almacenaban una cantidad) y todos se almacenaban en el mismo nivel de subíndice (4 subíndices) con subíndices similares (el tercer subíndice siempre era texto que representaba un color). Sin embargo, no tiene
porqué ser similar. No todos los nodos de datos tienen que tener el mismo número o tipo de subíndices, y pueden contener distintos tipos de datos.
A continuación viene un ejemplo de un global más complejo con datos de una factura que tiene
distintos tipos de datos almacenados en distintos niveles de subíndices:
^Factura(nº
^Factura(nº
^Factura(nº
^Factura(nº
^Factura(nº
^Factura(nº
^Factura(nº
etc.
factura,"Cliente") = información del cliente
factura,"Fecha") = fecha factura
factura,"Artículos") = nº de artículos de la factura
factura,"Artículos",1,"Serie") = número de serie del primer artículo
factura,"Artículos",1,"Cantidad") = cantidad del primer artículo
factura,"Artículos",1,"Precio") = precio del primer artículo
factura,"Artículos",2,"Serie") = número de serie del segundo artículo
11
Capítulo 2
Múltiples elementos de datos por nodo
Con frecuencia, un solo elemento de datos se almacena en un nodo de datos, como una fecha o
una cantidad, pero algunas veces resulta útil almacenar múltiples elementos de datos juntos en
un solo nodo de datos. Esto es particularmente útil cuando existe un conjunto de datos relacionados a los que se accede en grupo con frecuencia. Esto también puede mejorar el rendimiento al
necesitar menos accesos a la base de datos.
Por ejemplo, en la factura anterior cada artículo incluía el número de serie, la cantidad y el precio, todos ellos como nodos separados, pero se podrían almacenar como una lista de elementos
en un solo nodo:
^Factura(nº factura,"ArtículosLínea",nº artículo).
Para simplificar esto, Caché dispone de la función $list(), que puede agrupar varios elementos de
datos en una cadena de bytes de longitud delimitada y más tarde desagruparlos conservando el
tipo de datos.
El bloqueo lógico favorece la alta concurrencia
En sistemas con miles de usuarios, la reducción de conflictos entre procesos concurrentes es
crítica para conseguir alto rendimiento. Uno de los mayores conflictos se da entre transacciones
que intentan acceder a los mismos datos.
Los procesos de Caché no bloquean páginas enteras de datos al ejecutar actualizaciones. En su
lugar, dado que las transacciones requieren acceso frecuente o cambios a pequeñas cantidades
de datos, en Caché el bloqueo de la base de datos se realiza a nivel lógico. Los conflictos de la
base de datos se reducen aún más utilizando operaciones individuales de suma y resta, que no
requieren bloqueo. (Estas operaciones resultan especialmente útiles en los contadores incrementales utilizados para asignar números de id y para modificar contadores estadísticos).
Con Caché, las transacciones individuales se ejecutan más rápidamente, y se pueden ejecutar más
transacciones simultáneamente.
Datos de longitud variable en sparse arrays
Como los datos de Caché tienen de forma inherente una longitud variable, y se almacenan en
sparse arrays, Caché suele necesitar menos de la mitad del espacio que necesita una base de datos
relacional. Además de reducir los requerimientos de disco, el almacenamiento de datos compacto
mejora el rendimiento porque se pueden leer y escribir más datos con una sola operación de E/S,
y los datos se pueden almacenar en memoria intermedia cache de forma más eficiente.
Las declaraciones y definiciones no son necesarias
Las arrays multidimensionales de Caché son inherentemente independientes de los tipos, tanto
en los datos en sí como en los subíndices. Las declaraciones, definiciones o asignaciones de almacenamiento no son necesarias. Los datos globales simplemente empiezan a existir desde que son
insertados.
12
Namespaces
Caché, los datos y el código se almacenan en archivos de disco con el nombre CACHE.DAT (sólo
uno por directorio). Cada archivo contiene numerosos "globals" (arrays multidimensionales). En
un archivo, el nombre de cada global debe ser único, pero archivos diferentes pueden contener
el mismo nombre de global. Sin mucho rigor, se pueden considerar estos archivos como bases
de datos.
En lugar de especificar qué archivo de base de datos utilizar, cada proceso de Caché utiliza un
"namespace" para acceder a los datos. Un namespace es un mapa lógico que mapea el código y
los nombres de las arrays multidimensionales globales y el código con las bases de datos. Si se
mueve una base de datos de una unidad de disco u ordenador a otro, sólo es necesario actualizar
el mapeo del namespace. La propia aplicación no cambia.
Normalmente, aparte de algo de información del sistema, todos los datos de un namespace se
almacenan en una sola base de datos. Sin embargo, los namespaces proporcionan una estructura
flexible que permite mapeos arbitrarios, y no es extraño que un namespace mapee el contenido
de varias bases de datos, pudiendo incluir algunas situadas en otros ordenadores.
Las ventajas de Caché
Rendimiento: Utilizando un modelo de datos multidimensional eficaz con técnicas de
almacenamiento mediante Sparse Arrays en lugar de un laberinto inmanejable de tablas
bidimensionales, el acceso a los datos y las actualizaciones se realizan con menos operaciones E/S en disco. La E/S reducida significa que las aplicaciones se ejecutarán más
rápidamente.
Escalabilidad: El modelo de datos multidimensional transaccional permite a las aplicaciones basadas en Caché escalarse a muchos miles de usuarios sin sacrificar el alto
rendimiento. Esto se debe a que el acceso a los datos de un modelo multidimensional no
se ve afectado de forma significativa por el tamaño o la complejidad de la base de datos,
si lo comparamos con los modelos relacionales. Las transacciones acceden a los datos
que necesitan sin realizar complicados "joins" o hacer operaciones de tabla en tabla.
El uso del bloqueo lógico en Caché para las actualizaciones en lugar de bloquear las
páginas físicas contribuye también de forma importante a la concurrencia, como lo es su
sofisticado almacenamiento de datos en memoria intermedia cache a través de las redes.
Desarrollo rápido: Caché permite desarrollar más rápidamente porque la estructura de
datos proporciona un almacenamiento natural y de fácil comprensión de datos complejos y no requiere gran cantidad de declaraciones ni definiciones largas o complicadas. El acceso directo a los globales es
muy sencillo, lo que permite utilizar la misma sintaxis de
lenguaje que para acceder a las arrays locales.
Rentabilidad: Comparadas con las aplicaciones relacionales de
tamaño similar, las aplicaciones basadas en Caché requieren
mucho menos hardware y ningún administrador de bases de
datos. La gestión y utilización del sistema son sencillas.
13
Capítulo 2
Acceso SQL
SQL es el lenguaje de consulta de Caché y soporta un conjunto completo de funcionalidades de
bases de datos relacionales, incluyendo DLL, transacciones, integridad referencial, triggers, procedimientos almacenados y mucho más. Caché soporta acceso mediante ODBC y JDBC (utilizando un controlador basado en Java puro). Los comandos y consultas SQL también pueden embeberse en Caché ObjectScript y dentro de métodos de objeto.
SQL accede a los datos representados como tablas con filas y columnas. Dado que los datos de
Caché se almacenan realmente en eficientes estructuras multidimensionales, las aplicaciones
que utilizan SQL obtienen un mejor rendimiento con Caché que cuando se ejecutaban sobre
bases de datos relacionales tradicionales. El rendimiento resulta evidente, tanto con las consultas ya compiladas y altamente eficaces como con la ejecución de sentencias SQL dinámicas
(definidas en tiempo de ejecución).
Caché soporta, además de la sintaxis SQL estándar, muchas de las extensiones utilizadas habitualmente en otras bases de datos por lo que muchas aplicaciones basadas en SQL pueden ejecutarse
en Caché sin realizar cambios, especialmente aquellas escritas con herramientas independientes
de la base de datos. Sin embargo, los procedimientos almacenados específicos de proveedores
necesitarán algo de trabajo e InterSystems tiene traductores para facilitar ese trabajo.
Caché SQL incluye mejoras de objetos que hacen que el código SQL sea más sencillo y más intuitivo de leer y escribir.
SQL TRADICIONAL
SQL AMPLIADO A OBJETOS
SELECT
SELECT
CV.NombCompleto, MV.Descr, VP.Valor,
Cliente->NombCompleto,
AV.FechaFac, AV.NumFac
Cliente->MercadoVenta->Descr, Valor,
ArtVenta->FechaFac, ArtVenta->NumFac
FROM
VentasPrinc VP, ArtVenta AV, ProdVenta PV,
FROM VentasPrinc
ClienteVenta CV, MercadoVenta MV
WHERE Producto->Descr = ‘Martillo’
WHERE
AV.IDArtVenta *= VP.ArtVenta
AND PV.IDProdVenta *= VP.Producto
AND CV.IDClienteVenta *= VP.Cliente
AND MV.IDMercadoVenta *= CV.MercadoVenta
AND PV.Descr = ‘Martillo’
14
Las ventajas de Caché
SQL más rápido: Las aplicaciones relacionales pueden disfrutar de un rendimiento significativamente mayor utilizando Caché SQL para conectar con la eficiente base de datos
post-relacional de Caché.
Desarrollo más rápido: En Caché, las consultas SQL pueden escribirse de forma más
intuitiva, utilizando menos líneas de código.
Compatibilidad con las aplicaciones y generadores de informes existentes:
Los controladores ODBC y JDBC nativos de Caché proporcionan interoperatividad de
alto rendimiento con aplicaciones convencionales, incluyendo muchas de las herramientas de análisis de datos y generación de informes más conocidas.
Acceso a bases de datos relacionales con Caché Relational Gateway
Caché Relational Gateway permite que una solicitud SQL que se origine en Caché se envíe a otras
bases de datos (relacionales) para su proceso.
Utilizando Gateway, una aplicación de Caché puede
recuperar y actualizar datos almacenados en la
mayoría de las bases de datos relacionales.
Relational Gateway
Además, si se compilan las clases de bases de
datos de Caché con la opción CachéSQLStorage,
Gateway permite a las aplicaciones de Caché utilizar bases de datos relacionales de forma transparente. Sin embargo, las aplicaciones se ejecutarán más rápidamente y serán más escalables si acceden a la base de datos post-relacional
de Caché.
15
Capítulo 2
Caché Objects
El modelo de objetos de Caché se basa en el estándar ODMG. Caché soporta un conjunto completo de conceptos de programación orientada a objetos, incluyendo la encapsulación, los objetos
embebidos, la herencia múltiple, el polimorfismo y las colecciones.
Los lenguajes de script integrados en Caché manipulan directamente estos objetos y Caché también expone las clases de Caché como clases de Java, EJB, COM, .NET y C++. Las clases de Caché
también pueden habilitarse automáticamente para soportar XML y SOAP simplemente pulsando
un botón en Studio IDE. De esta forma, los objetos de Caché están disponibles inmediatamente
para cualquier tecnología de objetos de uso común.
Un programa externo al Servidor de Aplicaciones de Caché puede acceder de varias formas a las
clases Caché:
1. Cualquier clase Caché se puede proyectar como una clase del lenguaje nativo. Cuando un
programa de Java, C++, C#, Visual Basic o cualquier otro accede a un objeto de Caché,
llama a una plantilla de la clase en el lenguaje nativo. Esa clase de plantilla (generada
automáticamente por Caché) se comunica con el Servidor de Aplicaciones de Caché para
invocar métodos del servidor de Caché y acceder a las propiedades o modificarlas. El
estado de los objetos de Caché siempre se mantiene en el Servidor de Aplicaciones de
Caché. Para acelerar la ejecución y reducir la cantidad de mensajes, Caché almacena en
memoria intermedia caché una copia de los datos del objeto en el cliente y realiza actualizaciones en paralelo con otros mensajes cuando es posible.
2. Se puede utilizar una proyección “ligera” para clases de bases de datos en las que la clase
de plantilla del lenguaje nativo accede directamente a la base de datos, sin pasar por el
Servidor de aplicaciones. El estado del objeto no se mantiene en el Servidor de aplicaciones; las propiedades en la memoria sólo se mantienen en el cliente. Esta solución
ofrece un rendimiento considerablemente más alto, pero menor funcionalidad, dado que
no se pueden invocar los métodos de instancia del servidor de la clase (es decir, los métodos que necesitan acceso a las propiedades que están en la memoria).
3. La tecnología Jalapeño de InterSystems permite a los desarrolladores de Java crear en
primer lugar clases persistentes Java como cualquier otra clase POJO (“Plain Old Java
Objects”) en el IDE de su elección y a continuación hacer que Caché genere automáticamente un esquema de base de datos y la clase Caché correspondiente. Utilizando esta
solución, la clase Java no se modifica y la aplicación sigue accediendo a sus propiedades y
métodos. Caché proporciona una clase de biblioteca (“ObjectManager”) con una API que
se utiliza para almacenar y recuperar objetos de base de datos y realizar consultas.
Con cada una de estas tres soluciones, el programa del usuario percibe el objeto como local.
Caché maneja de forma transparente todas las comunicaciones, utilizando llamadas o TCP.
16
Generadores de métodos
Caché incluye varias tecnologías de objetos avanzadas exclusivas y una de
ellas son los generadores de métodos. Un generador de métodos es un método
que se ejecuta en tiempo de compilación, generando código que puede ejecutarse cuando se ejecuta el programa. El generador de métodos tiene acceso a
las definiciones de clases, incluidas las definiciones de propiedades y métodos,
y parámetros, con el fin de permitirle generar un método personalizado para
la clase. Los generadores de métodos son particularmente potentes combinados con la herencia múltiple; funcionalmente pueden definirse en una clase
heredada multiplicada que se personaliza a sí misma para la subclase.
Las ventajas de Caché
Caché está totalmente preparado
para objetos, y proporciona toda la
potencia de la tecnología de objetos
a los desarrolladores de aplicaciones
de proceso transaccional de alto
rendimiento.
Desarrollo rápido de aplicaciones:
La tecnología de objetos constituye
una potente herramienta para
aumentar la productividad del programador. Los desarrolladores
pueden pensar en objetos (incluso
objetos tremendamente complejos)
y utilizarlos de forma sencilla y cercana a la realidad, acelerando el
proceso de desarrollo de la aplicación. Además, la modularidad e
interoperabilidad innata de los
objetos simplifican el mantenimiento de la aplicación y permiten al
programador aprovechar su trabajo
para otros muchos proyectos.
Desarrollo natural: Los objetos de
la base de datos aparecen como
objetos nativos del lenguaje utilizado por el desarrollador. Sin necesidad de escribir código tedioso para
descomponer los objetos en filas y
columnas y después volver a
ensamblarlos.
17
Capítulo 2
Indexación con mapa de bits transaccional
Las ventajas de Caché
Consultas radicalmente más rápi­
das: Mediante la utilización de técnicas de “bitmapping” transaccional,
los usuarios pueden conseguir
búsquedas extremadamente rápidas
sobre grandes bases de datos (buscar en millones de registros en una
fracción de segundo) en sistemas
usados principalmente para proceso
transaccional.
Actualización a “velocidad de
transacción”: Los bitmap de Caché
se pueden actualizar tan rápido
como los índices tradicionales, con
lo cual son adecuados para su uso
con las aplicaciones de proceso de
transacciones.
Análisis de datos en tiempo real:
La indexación con bitmap transaccional de Caché permite realizar
análisis de los datos en tiempo real
sobre datos totalmente actualizados.
Análisis en el servidor de produc­
ción: No es necesario disponer de
un segundo ordenador dedicado a
almacén de datos y soporte a la
decisión. Tampoco existe la necesidad de realizar operaciones diarias
de transferencias de datos al segundo sistema ni de administradores
responsables de su soporte.
Escalabilidad: La velocidad de los
índices bitmap transaccionales
mejora la capacidad de crear sistemas con enormes cantidades de
datos en los que se deben realizar.
18
Caché proporciona de forma exclusiva Indexación bitmap transaccional, que
puede incrementar radicalmente el rendimiento de las consultas complejas,
ofreciendo mayor rapidez en las consultas de datos sobre datos dinámicos.
El rendimiento de la base de datos depende fundamentalmente de si se
dispone de índices sobre las propiedades que se utilizan con más frecuencia en
las búsquedas. La mayoría de las bases de datos utilizan índices que, por cada
valor posible de la columna o propiedad, mantienen una lista de los identificadores de fila (o id de objeto) de las filas/objetos que tienen ese valor.
Un índice bitmap es otro tipo de índice. Los índices bitmap contienen un
mapa de bits asignado por cada posible valor de la columna/propiedad, con
un bit por cada fila/objeto que se almacena. Un bit a 1 significa que la
fila/objeto tiene ese valor de la columna/propiedad.
La ventaja de los índices bitmap está en que las consultas complejas pueden
procesarse realizando operaciones lógicas (AND, OR) sobre los índices, determinando exactamente qué objetos (filas) cumplen las condiciones de la consulta, sin tener que buscar en toda la base de datos. Con frecuencia, los
índices bitmap pueden reducir los tiempos de respuesta de las consultas que
realizan búsquedas en grandes volúmenes de datos, multiplicando por 100 o
más su efectividad.
Historicamente los bitmap suelen sufrir dos problemas: a) su actualización en
bases de datos relacionales puede ser muy lenta, y b) pueden llegar a ocupar
mucho espacio de almacenamiento. Por lo tanto, raramente se utilizan para
aplicaciones de proceso de transacciones con bases de datos relacionales.
Caché ha incorporado los Índices bitmap transaccionales que aprovechan las
estructuras de datos multidimensionales para eliminar estos dos problemas.
La actualización de estos bitmap suele ser más rápida que la de los índices
tradicionales y utilizan técnicas de compresión sofisticadas para reducir radicalmente el espacio de almacenamiento. Caché también soporta sofisticadas
técnicas de “bit-slicing”. El resultado es un bitmap ultra rápido que puede utilizarse para buscar en millones de registros en tan solo una fracción de
segundo sobre una base de datos de proceso de transacciones en línea. Las
aplicaciones de “Business Intelligence” y “Datawarehousing” pueden trabajar
con datos “reales”.
Caché ofrece índices tradicionales y bitmap transaccionales. Caché también
soporta índices multicolumna. Por ejemplo, un índice sobre Provincia y
ModeloCoche puede identificar rápidamente qué personas tienen un coche de
un tipo concreto que está registrado en una provincia determinada.
Búsqueda de texto con Word­Aware
Mediante la indexación con Word-Aware, Caché soporta búsqueda de texto
Las ventajas de Caché
libre en la que se pueden hacer consultas de texto que contengan palabras de
interés, aun cuando las palabras reales del texto sean variantes de las palabras
de la búsqueda. Los algoritmos de Word-Aware son específicos del idioma
natural que se utilice. La búsqueda con detección de términos de interés está
disponible para una amplia variedad de idiomas, incluidos el inglés, el francés,
el alemán, el italiano, el japonés, el portugués y el español. Se están incorporando más idiomas.
Word­Aware Searching
WHERE Description
Caché finds “search”,
%Contains (‘search’)
“searched”, “searching”, …
WHERE Description
Caché finds “close”, “closed”, …
%Contains (‘close’)
But not “closet” or “disclose”.
Búsquedas potentes en texto no
estructurado: Se pueden buscar
fácilmente palabras clave y relacionadas en texto no estructurado,
como las notas o los documentos de
los facultativos.
Búsquedas ultrarrápidas: Con la
búsqueda con detección de términos
de interés y la tecnología de mapa
de bits de Caché, se pueden realizar
búsquedas en volúmenes de texto
masivos en una fracción de segundo.
19
Capítulo 2
Tecnología InterSystems iKnow
La tecnología de InterSystems iKnow permite analizar e indexar texto y otros tipos de datos sin
estructurar, identificando conocimientos, conceptos y relaciones importantes. A diferencia de la
mayoría de otras tecnologías de semántica y de búsqueda, iKnow indicará automáticamente los
elementos significativos más interesantes de los datos sin necesidad de que el usuario escriba
nada, ni siquiera un término de búsqueda.
■ Indexación inteligente
(Smart Indexing) La indexación inteligente analiza y
transforma el texto sin estructurar en una red comprensible de relaciones y conceptos sin necesidad de usar
diccionarios, taxonomías u ontologías predefinidas. La
indexación inteligente permite tener una visión general
de la información relevante, relacionada y representativa
dentro de grandes volúmenes de texto sin estructurar, sin
necesidad de escribir un término de búsqueda.
La indexación inteligente funciona con diversos idiomas.
También puede identificar conceptos (patrones recurrentes) dentro de datos sin estructurar que no sean texto
tradicional.
■ Coincidencia inteligente
(Smart Matching) La coincidencia inteligente enlaza los
resultados de la indexación inteligente con informaciones
específicas de un dominio, una organización o un sector. La
correspondencia se basa en conceptos significativos y sus
combinaciones, no sólo en palabras, e incluye correspondencias exactas, parciales y “dispersas”.
■ Interpretación inteligente
(Smart Interpretation) La interpretación inteligente aplica
análisis y/o reglas de negocio a los resultados derivados
de la indexación inteligente y la correspondencia
inteligente. (Es posible que requiera la utilización de
InterSystems Ensemble® o InterSystems DeepSee).
20
Las ventajas de Caché
Funciones integradas para analizar e indexar datos sin estructurar:
La tecnología de InterSystems iKnow se incorpora a Caché. Puede acceder a todos sus datos
(estructurados y sin estructurar) sin recurrir a soluciones o herramientas de terceros.
Trabajo inicial mínimo:
A diferencia de otras herramientas de búsqueda semántica, la tecnología de InterSystems
iKnow puede encontrar conceptos y relaciones sin definirlas previamente. No es necesario que los usuarios sepan lo que buscan antes de buscarlo.
Multilingüe:
La tecnología de InterSystems iKnow funciona con varios idiomas, entre ellos el Español,
incluso si hay varios de ellos mezclados en un mismo documento.
Múltiples propósitos:
La tecnología de InterSystems iKnow se puede utilizar para solucionar varios tipos de
problemas: Identificar los elementos más interesantes dentro de una gran cantidad de
documentos, orientar automáticamente la información según su similitud con otras informaciones, resumir grandes cantidades de texto en amplios resúmenes, etc.
21
Capítulo 2
Enterprise Cache Protocol para sistemas distribuidos
Rendimiento escalable en sistemas distribuidos
Enterprise Cache Protocol (ECP) de InterSystems es una tecnología de alto rendimiento y escalable
que permite a los ordenadores de un sistema distribuido utilizar sus bases de datos entre ellos. Para
utilizar ECP no es necesario realizar cambios en la aplicación porque simplemente trata la base de
datos como si fuera local.
Este es el modo de funcionamiento de ECP. Cada Servidor de Aplicaciones incluye su propio Servidor
de Datos, que puede actuar sobre los datos que residen en sus propios sistemas de discos o en bloques que se le han transferido de otro Servidor de Datos mediante ECP. Cuando un cliente realiza una
solicitud de información, el Servidor de Aplicaciones de Caché intenta responder a la solicitud desde
su memoria cache local. Si no puede, solicitará los datos necesarios al Servidor de Datos de Caché
remoto. La respuesta incluye los bloques de la base de datos donde están almacenados los datos.
Estos bloques se almacenan en la memoria intermedia cache del Servidor de Aplicaciones, donde
estarán disponibles para todas las aplicaciones que se ejecuten en ese servidor. ECP se encarga
automáticamente de gestionar la coherencia de la memoria intermedia cache en la red y de volver a
enviar cualquier cambio a los Servidores de Datos.
Las ventajas de rendimiento y escalabilidad de ECP son enormes. Los clientes disfrutan de las respuestas rápidas porque utilizan frecuentemente los datos almacenados en memoria intermedia cache. Y el
almacenamiento en memoria intermedia cache reduce enormemente el tráfico de red entre los servidores de bases de datos y de aplicaciones, por lo que cualquier red puede soportar muchos más
servidores y clientes.
Enterprise Cache Protocol
Facilidad de uso ­ Sin cambios en la apli­
cación
El uso de ECP es transparente para las aplicaciones.
Las aplicaciones diseñadas para ejecutarse en un
servidor único se ejecutan en un entorno multiservidor sin cambios. Para utilizar ECP, el gestor
del sistema simplemente identifica uno o más
Servidores de Datos en un Servidor de Aplicaciones
y después utiliza el Mapeo dinámico de
Namespaces para indicar que las referencias a algunas o todas las estructuras globales (o partes de las
estructuras globales) corresponden a ese Servidor
de Datos remoto.
Flexibilidad de configuración
Cada sistema Caché puede funcionar como Servidor
de Aplicaciones y como Servidor de Datos para
otros sistemas. ECP soporta cualquier combinación de Servidores de Aplicaciones y Servidores de
Datos y cualquier topología punto-a-punto de hasta 255 sistemas.
22
Las ventajas de Caché
Escalabilidad masiva: Enterprise
Cache Protocol de Caché permite
añadir servidores de aplicaciones, a
medida que aumentan las necesidades
de uso, utilizando cada uno la base de
datos como si se tratase de una base
de datos local. Si el rendimiento del
disco se convierte en un cuello de
botella, pueden añadirse más
Servidores de Datos, creando particiones lógicas de la base de datos.
Mayor disponibilidad: El fallo de un
Servidor de Aplicaciones afecta a
menos personas porque los usuarios
están distribuidos en múltiples ordenadores. Si se produce la "caída" y
rearranque de un Servidor de Datos,
o un corte de luz temporal en la red,
los Servidores de Aplicaciones
pueden seguir procesando sin advertirse nada salvo una pequeña pausa.
En algunas configuraciones, también
es posible configurar que el Servidor
de Datos se recupere sobre un
Servidor Shadow (de respaldo) o sistema en cluster, mejorándose aún
más la fiabilidad.
Menos coste: Es posible combinar un
gran número de ordenadores de bajo
coste para formar un sistema muy
potente que soporte proceso masivo
("Grid Computing").
Uso transparente: No es necesario
escribir las aplicaciones específicamente para ECP. Las aplicaciones de
Caché pueden aprovechar automáticamente las ventajas de ECP sin realizar
cambios.
23
24
Tolerancia a fallos
Incluso los entornos más rigurosos pueden ser víctimas de incidencias inesperadas: errores del
hardware, fallos de alimentación o sucesos tan graves como inundaciones u otros desastres naturales – pero los hospitales, las telecomunicaciones y otros servicios críticos no se pueden permitir
una “caída”. A fin de satisfacer estándares tan exigentes, Caché está diseñado para recuperarse
con facilidad de fallos de alimentación, y ofrece gran variedad de opciones de recuperación de
fallos para reducir o eliminar el impacto sobre los usuarios.
Caché Write-Image Journaling y otras características garantizan la integridad de la base de datos
para la mayoría de los tipos de errores de hardware – incluidos los fallos de alimentación – lo
que permite una rápida recuperación y minimiza las consecuencias para los usuarios.
Caché proporciona además opciones de configuración de alta disponibilidad para reducir en
mayor medida o eliminar el impacto sobre los usuarios, entre ellas:
■
Clusters de recuperación de fallos
■
Servidores Shadow
■
ECP distribuido
Mirroring
El Mirroring, o creación de Bases de Datos Espejo, es una configuración de alta disponibilidad
que duplica los datos en un disco aparte en tiempo real, con recuperación automática frente a
fallos (failover).
Un Mirror de base de datos es una agrupación lógica de dos sistemas Caché. Al inicio, el Mirror
designa de forma automática uno de estos dos sistemas físicamente independientes como sistema principal, mientras que el otro se convierte automáticamente en el sistema de respaldo o
backup. La sincronización de las bases de datos con funciones de mirroring activadas, se realiza
en tiempo real desde el elemento principal del failover hasta el de backup mediante un canal
TCP. El sistema backup devuelve acuses de recibo de los datos copiados mediante un canal especial para ello. El acuse de recibo indica, entre otras cosas, hasta qué punto está actualizado el
elemento de backup del failover.
A Database Mirror
25
Capítulo 2
Las ventajas de Caché
Bases de datos blindadas: Caché
Write-Image Journaling y otras características garantizan la integridad
de la base de datos para la mayoría
de los tipos de errores de hardware,
incluidos los fallos de alimentación.
Configuraciones de alta disponi­
bilidad: La utilización de mirroring,
ECP, y/o clusters de recuperación
de fallos permite la rápida recuperación después de los cortes de
alimentación y minimizan o, en
algunos casos eliminan, su impacto
sobre los usuarios.
Alta disponibilidad a bajo coste:
La base de datos Caché con Mirror
no requieren grandes inversiones en
hardware, asistencia, licencias de
sistemas operativos o almacenamiento. Además, la base de datos
Caché con Mirror es de fácil configuración y mantenimiento, con lo que
se reducen los costes de administración.
Los clientes externos (enlaces de idiomas, clientes ODBC/JDBC/SQL, usuarios de conexión directa, etc.) se conectan con el mirror a través de su IP virtual (VIP, del inglés Virtual IP), que se especifica durante la configuración
del mirroring. La IP virtual del Mirror queda automáticamente enlazada con
una interfaz en el sistema principal del mirror. La configuración de una VIP
para el Mirror es opcional. Si no se especifica, todos los clientes externos
deberán conectarse directamente con la unidad principal en ejecución y
conocer los elementos de la recuperación de fallos y su perfil actual dentro
del mirror.
Si falla el sistema principal, el sistema de backup toma el control de forma
automática. Cuando el mirror se configura de manera que los clientes inicien
sesión mediante la VIP, éstos no saben qué elementos del mirror funcionan.
La recuperación frente a fallos o failover es completamente transparente
para los usuarios.
Caché también puede actualizar varios elementos del mirror ASYNC (que
suelen estar separados geográficamente), lo cual permite generar redundancia en el sistema y contribuye a la recuperación tras desastres. El failover
hacia un elemento ASYNC no es automático.
Además, un elemento ASYNC puede ser actualizado por varios mirror, con lo
cual se crea un almacén central de datos y se permite el uso de Business
Intelligence en tiempo real utilizando todos los datos empresariales.
Utilización de un sistema Mirror con ECP
Cuando se utilizan en un sistema Mirror, los servidores de aplicaciones basados en Enterprise Cache Protocol (ECP) disponen de información interna
sobre los elementos del Mirror, incluido el elemento principal actual. Por lo
tanto, los servidores de aplicaciones no se basan en la VIP del Mirror, sino
que se conectan directamente con el sistema principal seleccionado.
Si el elemento principal del Mirror falla, los servidores de aplicaciones de ECP
lo interpretarán como una condición de reinicio del servidor. Los servidores
simplemente restablecerán sus conexiones con el nuevo elemento principal
del failover y continuarán el proceso de su carga de trabajo en curso. Como
mucho, los usuarios experimentarán sólo una breve pausa.
Clusters de recuperación de fallos
Utilizando hardware en clusters de recuperación de fallos (“failover”), los
servidores de datos comparten acceso a los mismos discos, pero sólo uno ejecuta Caché de forma activa en un momento determinado. Si el servidor activo
falla, Caché se inicia automáticamente en otro servidor, que asume las
responsabilidades de proceso. A continuación, los usuarios pueden volver a
iniciar sesión en el servidor nuevo.
26
Un servidor de datos de ECP se puede configurar como cluster de recuperación de fallos. Si se produce una caída del servidor de datos principal, el
servidor de datos de respaldo lo sustituye.
Modelo de seguridad
Caché está certifcado para “Common Criteria EAL3”. El modelo de seguridad de Caché esta diseñado para el desarrollo de las aplicaciones en tres vías:
La seguridad de Caché se basa en la autenticación, la autorización, la auditoría y el cifrado de la
base de datos. Caché proporciona estas funciones de seguridad a la vez que minimiza la carga en el
rendimiento de las aplicaciones.
Autenticación
La autenticación es la manera en la que los usuarios demuestran a Caché que son quienes dicen
ser. (Un “usuario” no tiene que ser necesariamente una persona. Podría ser, por ejemplo, un dispositivo de medida que genera datos, o una aplicación en ejecución en otro sistema que está
conectado a Caché.) Caché tiene varios mecanismos de autenticación disponibles:
■ Kerberos: El medio de autenticación más seguro. El sistema de autenticación Kerberos proporciona en una red una sólida autenticación probada matemáticamente.
■ LDAP: Caché admite la autenticación mediante Lightweight Directory Access Protocol
(LDAP). En este caso, Caché se pone en contacto con un servidor LDAP para autenticar a los
usuarios, basándose en su base de datos de usuarios y su información asociada para
realizar la autenticación. El servidor LDAP también controla todos los aspectos de la
gestión de contraseñas, las políticas de contraseñas, etc.
■ Contraseñas: Caché solicita al usuario una contraseña y compara un hash de ésta con el
valor hash que ha almacenado.
■ Autenticación delegada: La autenticación delegada supone un medio de creación de mecanismos de autenticación personalizados. El desarrollador de aplicaciones controla por completo
el contenido del código de autenticación delegado. Caché incluye una plantilla para crear
código de autenticación personalizado.
■ Basada en el sistema operativo: La autenticación basada en el sistema operativo confía en
que el sistema operativo ha verificado la identidad de cada usuario, y utiliza esa misma
identificación para Caché.
27
Capítulo 2
También puede permitir a todos los usuarios conectarse a Caché sin autenticarse.
Caché incorpora compatibilidad con la autenticación de dos factores, lo cual exige que los usuarios verifiquen su identidad utilizando algo que saben y algo que tienen. Por ejemplo, cuando un
usuario proporciona una contraseña (algo que sabe), las aplicaciones pueden enviar un mensaje
de texto a su teléfono móvil (algo que tiene). El mensaje de texto indicaría un código de seguridad adicional que debería especificarse antes de que se concediera el acceso a la aplicación.
Caché admite el “single sign-on”, una sola identificación al inicio de sesión permitiendo la participación en una configuración de OpenAM.
Autorización
Cuando se autentica un usuario, la siguiente operación relacionada con la seguridad consiste en
determinar lo que ese usuario puede hacer, ver o modificar. Esta concreción y el control del
acceso son conocidos como autorización. La asignación y la gestión de privilegios suelen
realizarse mediante el Portal de Gestión de Caché.
Recursos, permisos y privilegios
El objetivo principal de la seguridad es la protección de recursos: la información o las funciones
en cualquier forma. Con Caché, los recursos pueden ser bases de datos, servicios, aplicaciones,
herramientas e incluso acciones administrativas. El administrador del sistema concede acceso a
estos elementos asignando permisos, como READ, WRITE o USE. La combinación de un recurso
y un permiso asociado asignado son conocidos como un privilegio. Además de los recursos
definidos por el sistema, el administrador de la seguridad puede crear recursos específicos de la
aplicación y utilizar los mismos mecanismos para conceder y comprobar permisos.
Perfiles
Para mayor simplicidad, a los usuarios se les asignan generalmente uno o más perfiles o “roles”
(por ejemplo, “TécnicoLab”, o “Nóminas”), y a continuación el administrador de seguridad
asigna privilegios para un recurso concreto a esos perfiles en lugar de a individuos específicos.
El usuario hereda todos los privilegios correspondientes a los perfiles a los que pertenece.
Perfiles asignados por aplicación
A menudo resulta útil para un usuario obtener privilegios adicionales temporalmente en lugar
de tenerlos asignados de forma permanente. Por ejemplo, en lugar de que el administrador de
seguridad asigne un extenso conjunto de privilegios a un usuario (como la capacidad de acceso
y modificación de la base de datos de nóminas), es posible asignar al usuario únicamente el
privilegio de acceso a la aplicación de nóminas, y la aplicación puede aumentar a continuación
los privilegios del usuario mientras se esté utilizando.
Para llevar a cabo este aumento, hay que asignar los perfiles a las aplicaciones. Al acceder a la
aplicación, el usuario adquiere temporalmente perfiles adicionales. Los perfiles adicionales
pueden ser simplemente una lista que adquiere todo aquél autorizado a utilizar la aplicación, o
pueden ser más personalizados, en función de los perfiles que ya tiene el usuario.
Esta característica resulta particularmente útil para las aplicaciones basadas en web. Tras la
autenticación y la determinación de que el usuario está autorizado para utilizar la aplicación, el
usuario adopta temporalmente los perfiles adicionales asignados a dicha aplicación durante el
intervalo de tiempo que se accede a la página.
28
El administrador de seguridad también puede asignar a rutinas específicas la capacidad de
realizar un aumento de perfiles para obtener los perfiles adicionales de las aplicaciones especificadas, después de pasar las pruebas de seguridad especificadas para el usuario. Este recurso está
estrictamente controlado, y es el mecanismo por el que las aplicaciones que no son de web ejecutan el aumento de perfiles.
Auditoría
Muchas aplicaciones, especialmente aquellas que deben cumplir normativas legales como HIPPA o
Sarbanes-Oxley, necesitan proporcionar una auditoría segura. En Caché, todos los eventos del sistema y de las aplicaciones se graban en un registro de "append-only", que es compatible con
cualquier herramienta de consulta o informe que utilice SQL.
Encriptación: Datos en reposo
Caché soporta dos formas de encriptación de la base de datos:
■ El administrador de seguridad puede especificar que uno o más ficheros CACHE.DAT (bases
de datos) estén encriptados en el disco. A continuación se encripta todo el contenido de
esos ficheros, incluidos los índices que contengan.
■ Los desarrolladores pueden utilizar funciones del sistema para encriptar/desencriptar los
datos, que se pueden almacenar en la base de datos o transmitir. Esta característica se
puede utilizar para cifrar datos confidenciales y protegerlos de otros usuarios que tengan
acceso de lectura a la base de datos, pero no la clave
Por defecto, Caché cifra los datos con una implementación de AES (Advanced Encryption Standard
– Estándar avanzado de cifrado), un algoritmo simétrico que da soporte a claves de 128, 192 o
256 bits. Las claves de cifrado se almacenan en una ubicación protegida de la memoria. Caché proporciona funcionalidad completa de gestión de claves.
El “journal” también se puede encriptar.
Encriptación: Datos en movimiento
Caché admite el uso de SSL (Secure Sockets Layer – Capa de sockets seguros) y su sucesor, TLS
(Transport Layer Security – Seguridad de la capa de transporte), para garantizar la seguridad de
conexiones de varios tipos:
■ Cuando actúa como servidor, Caché acepta conexiones y establece el uso de SSL. Esto
incluye las conexiones entre los destinos de duplicación de Caché y los orígenes de duplicación de Caché.
■ Cuando actúa como cliente, Caché puede conectarse con los servidores que requieren el uso
de SSL.
En todos los casos, Caché utiliza lo que se denomina una configuración de SSL/TLS, que especifica
las diversas características de una instancia de Caché como parte de una conexión SSL/TLS.
La sección “Caché y Servicios Web” contiene más información sobre la seguridad de los datos en
movimiento.
29
Capítulo 3
Servidor de aplicaciones de Caché
El Servidor de Aplicaciones de Caché ofrece posibilidades avanzadas de programación de objetos,
sofisticado almacenamiento de datos en memoria intermedia cache y fácil acceso a diversas tecnologías. El Servidor de Aplicaciones de Caché permite desarrollar rápidamente aplicaciones de base
de datos sofisticadas, obtener alto rendimiento al operar con ellas y darles soporte con facilidad.
De forma específica, el Servidor de Aplicaciones de Caché proporciona:
■ La Máquina Virtual de Caché que ejecuta dos lenguajes de script integrados: Caché
ObjectScript y Basic.
■ Acceso a los Servidores de Datos Multidimensionales de Caché en el mismo ordenador, o
en otros, de forma transparente.
■ Software de conectividad con almacenamiento en memoria intermedia cache en la parte
cliente, para permitir el acceso rápido a Caché Objects desde todas las tecnologías utilizadas
habitualmente, incluyendo Java, C++, C#, COM, .NET, Visual Basic y Delphi. Caché se encarga
automáticamente de los procesos en red entre el cliente y el Servidor de Aplicaciones.
■ Compatibilidad con SOAP y XML.
■ Acceso SQL mediante ODBC y JDBC, incluyendo almacenamiento sofisticado en memoria intermedia cache en el cliente y el servidor de aplicaciones para conseguir mayor rendimiento.
■ Acceso a bases de datos relacionales.
■ Caché Server Pages para crear aplicaciones Web de alto rendimiento y fáciles de programar.
■ Caché Studio, un IDE para desarrollar y depurar rápidamente aplicaciones con Caché.
■ El código de los lenguajes de script se almacena en la base de datos y puede modificarse en
línea, propagándose los cambios automáticamente a todos los servidores de aplicaciones.
Máquina Virtual de Caché y lenguajes de script
El núcleo del Servidor de Aplicaciones de Caché es la rapidísima Máquina Virtual de Caché, que
soporta los dos lenguajes de script de Caché: Caché ObjectScript y Caché Basic.
■ Caché ObjectScript es un potente lenguaje orientado a objetos, fácil de aprender, que
incorpora estructuras de datos muy flexibles.
■ Caché Basic permite a los programadores de Visual Basic empezar a utilizar Caché de una
forma sencilla. Similar a VBScript, Basic se ha ampliado para disponer de acceso directo a
las arrays multidimensionales de Caché.
■ Caché MVBasic es la variante de los lenguajes de programación Basic utilizada en aplicaciones MultiValue (Pick). MVBasic se ha ampliado para dar soporte a objetos y tener acceso directo a los arrays multidimensionales de Caché.
30
El acceso a la base de datos desde la Máquina Virtual de Caché está muy optimizado. Cada proceso de usuario en la Máquina Virtual de Caché tiene acceso
directo a las estructuras de datos multidimensionales mediante la realización de
llamadas a la memoria compartida que accede a la memoria cache compartida
de la base de datos. Las otras tecnologías (Java, C++, ODBC, JDBC, etc.) se
conectan a través de la Máquina Virtual de Caché para acceder a la base de datos.
Interoperatividad total
La interoperatividad entre Caché ObjectScript, Basic y MVBasic y es total al
estar implementados en la misma Máquina Virtual de Caché.
■ Los métodos de objeto pueden escribirse en cualquier lenguaje, la
misma clase puede utilizar ambos lenguajes.
■ Cada lenguaje puede realizar llamadas a código escrito en el otro
lenguaje.
■ Comparten variables, arrays y objetos.
Desarrollo más rápido / Implantación flexible
En casi todos los casos, los programadores pueden desarrollar aplicaciones
más rápidamente, y la ejecución de esas aplicaciones será significativamente
más rápida con mayor escalabilidad, si escriben la mayor cantidad de código
posible con estos lenguajes de script (Caché ObjectScript y Basic) para que
puedan ejecutarse en la Máquina Virtual de Caché. Además, este tipo de código no requiere cambios en el caso de cambios de hardware o de sistema
operativo. Caché maneja automáticamente todas las diferencias del sistema
operativo y hardware.
Scripting Languages
Las ventajas de Caché
Desarrollo rápido de aplicaciones:
Desarrollar aplicaciones de base de
datos complejas con Caché
ObjectScript es mucho más rápido
que con cualquier otro lenguaje
importante, pudiendo llegar a ser de
10 a 100 veces más rápido. Mayor
rapidez también implica mayores
posibilidades de éxito del proyecto
(con menos programadores) y la
capacidad de adaptar rápidamente
la aplicación a medida que cambian
las necesidades.
Curva de aprendizaje más corta:
Quizás Basic sea el lenguaje informático más conocido del mundo.
Los desarrolladores que conocen
Visual Basic puede empezar a
escribir código inmediatamente en
Basic, y el modelo de objetos de
Caché se aprende fácilmente.
Más rápido y más escalable:
La Máquina Virtual de Caché y su
acceso directo a la base de datos
proporcionan aplicaciones más rápidas que pueden escalar a decenas de
miles de usuario que utilizan hardware de bajo coste.
Flexibilidad: El código que se ejecuta en la Máquina Virtual de Caché se
puede ejecutar en otro hardware y
sistema operativo sin cambios. El
código se almacena en la base de
datos y se propaga automáticamente
a los Servidores de Aplicaciones.
31
Capítulo 3
Caché ObjectScript
Caché ObjectScript es un potente lenguaje de programación orientado a objetos diseñado para el
desarrollo rápido de aplicaciones de base de datos. Estas son algunas de las características clave
de este lenguaje.
Estructura general
Caché ObjectScript está orientado a los comandos; por tanto su sintaxis es similar a:
set x=a+b
do rotate(a,3)
if (x>3)
Existe un conjunto de funciones de sistema integradas que son especialmente potentes para el
trabajo con texto. Sus nombres empiezan con el carácter ‘$’ para distinguirlas de los nombres de
variables y de arrays. Por ejemplo:
$extract(cadena,desde,hasta)
// extrae un conjunto de caracteres de una cadena
$length(cadena)
// determina la longitud de una cadena
Las expresiones utilizan la precedencia de operadores de izquierda a derecha, al igual que la
mayoría de las calculadoras de mano, excepto en los casos en que los paréntesis cambian el
orden de evaluación.
Almacenamiento flexible de datos
Una de las características más exclusivas de Caché ObjectScript es el alto grado de flexibilidad y
dinamismo. Los datos se pueden almacenar en:
■ Propiedades de objetos.
■ Variables.
■ Sparse arrays multidimensionales que permitan cualquier tipo de datos para los subíndices.
■ Archivos de base de datos ("globals") que son sparse arrays multidimensionales.
Con raras excepciones, en cualquier parte del lenguaje en la que se puedan utilizar variables se
pueden utilizar arrays, propiedades de objeto o referencias a global.
En la mayoría de los lenguajes informáticos, los tipos de datos son una extensión de los conceptos de almacenamiento del hardware (integer, float, char, etc.). Sin embargo, Caché ObjectScript
asume la filosofía de que las personas no piensan utilizando esos tipos de almacenamiento y que
esos tipos de datos "centrados en la informática" son un impedimento para el desarrollo rápido
de aplicaciones. La necesidad de declaraciones y sentencias de dimensión provoca muchos más
errores de los que ayuda a prevenir (errores como desbordamiento de entero de 2 bytes, o
cuando una cadena sobrepasa su asignación de memoria y daña otra variable). Sin embargo, la
creación de tipos de objeto como Persona, Factura o Animal, son muy apreciados y coherentes
con el modo en el que piensan los seres humanos.
32
Por eso, en Caché ObjectScript, las propiedades de objetos son muy dependientes de los tipos, pero los otros
tres tipos de almacenamiento (variables, arrays y nodos
globales) son entidades polimórficas independientes de
los tipos y no necesitan ser declaradas ni definidas.
Simplemente surgen cuando se las utiliza, y se modelan a
sí mismas según las necesidades de los datos que almacenan y el modo en que se utilizan en una expresión. Ni
siquiera las arrays necesitan una especificación de
tamaño, ni de dimensión, ni de tipos de subíndices o
datos. Por ejemplo, un desarrollador podría crear una array denominada Persona estableciendo
simplemente lo siguiente:
set Persona("Sánchez","Luis")="Soy una buena persona"
En este ejemplo, los datos se han almacenado en una array bidimensional que utiliza datos de
cadena como subíndices. Otros nodos de datos de esta array podrían tener un número distinto
de dimensiones y entremezclar cadenas, enteros u otros tipos de datos como subíndices. Por
ejemplo, uno podría almacenar datos en:
abc(3)
abc(3,-45.6,"Yes")
abc("Count")
todos en la misma array.
Acceso directo a la base de datos
Una referencia directa a la base de datos (una "referencia global") es en esencia una referencia
de array multidimensional precedida por el carácter del acento circunflejo '^'. Ese carácter indica que es una referencia a los datos almacenados en la base de datos en lugar de datos privados
de un proceso temporal. Cada array de la base de datos se denomina "global".
Al igual que con las arrays multidimensionales y las variables, no se necesitan declaraciones,
definiciones ni reservas de almacenamiento para acceder a los datos o almacenarlos en la base
de datos; los datos del global comienzan a existir desde el momento en que se almacenan. Por
ejemplo, para almacenar información en la base de datos, se podría escribir:
set ^Persona("Sánchez","Luis")="Soy muy buena persona"
y más tarde recuperarla mediante un código como el siguiente:
set x=^Persona("Sánchez","Luis")
El programador tiene completa flexibilidad para estructurar estas arrays de datos de globales.
(Consulte el Modelo de datos multidimensional).
33
Capítulo 3
Referencias a objetos
Caché Objects implementa el modelo de datos ODMG, con potentes extensiones.
En Caché ObjectScript se utiliza una "oref" (referencia a objeto) para acceder a un objeto ("oref"
es generalmente una variable cuyo valor especifica a qué objeto de la memoria se está haciendo
referencia). A "oref" le sigue un punto y el nombre de una propiedad o método. Las referencias a
objetos pueden utilizarse siempre que se pueda utilizar una expresión. Por ejemplo:
set nombre=persona.Nombre
// 'persona' es una variable cuyo valor es una oref
// el nombre de la persona se pone en la variable 'nombre'
if (persona.Edad>x)
// comprobar si la edad de la persona es mayor que 'x'
set dinero=factura.Total()
// 'Total()' es un método que calcula la suma de
// todos los artículos de la factura
Los métodos también se pueden ejecutar con un comando DO, cuando no se precisa un valor de
retorno. Por ejemplo:
do serie.Incremento()
// 'Incremento()' es un método cuyo valor de retorno,
// si existe, no es de interés
La "oref" no es lo mismo que un id de objeto de la base de datos. El id de objeto es un valor asociado de forma permanente al objeto de la base de datos; se utiliza para recuperar y almacenar
un objeto de base de datos. Una vez que un objeto está en la memoria, se le asigna un valor oref
reutilizable que después se utilizará para acceder a los datos del objeto. La próxima ocasión en
que el mismo objeto de la base de datos vuelva a la memoria, probablemente se le asignará un
valor oref distinto.
Acceso HTML y SQL
HTML para aplicaciones Web y SQL pueden estar embebidos en el código de Caché ObjectScript.
Llamadas al código
En algunos lenguajes de objetos, todo el código debe ser parte de algún método. Caché
ObjectScript no tiene esa restricción; puede llamarse al código directamente o mediante sintaxis
de objeto.
Las llamadas al código se realizan generalmente utilizando el comando DO.
do rotate(a,3)
Al código que devuelve un valor también se le puede llamar como una función. Por ejemplo,
set x=a+$$insert(3,y)
llama al procedimiento o subrutina "insertar" escrita por el programador.
También se puede llamar al código como método de objeto.
set dinero=factura.Total()
// Total() devuelve el importe total de la factura
do serie.Incremento()
// 'Incremento()' es un método cuyo valor de retorno,
// si existe, no es de interés
34
35
Capítulo 3
Rutinas
El código de Caché ObjectScript está organizado fundamentalmente en un conjunto de "rutinas". Cada rutina (generalmente de hasta 32
KB de tamaño) es un todo, en el sentido de que
puede editarse, almacenarse y compilarse de
forma independiente. Las rutinas se enlazan
dinámicamente en tiempo de ejecución; el programador no tiene que efectuar un paso adicional de enlace. El código de la rutina se almacena en la base de datos; así, las rutinas pueden
llamarse de forma dinámica a través de la red
en lugar de tener que estar instaladas en cada
ordenador.
En una rutina, el código está organizado como
un conjunto de procedimientos y/o subrutinas.
(Un método de objeto es un procedimiento,
pero se accede a él mediante una sintaxis diferente).
Al llamar a código que está en la misma rutina, sólo se necesita el nombre del procedimiento o
subrutina. En caso contrario, debe añadirse el nombre de la rutina.
do transferir()
// llama a 'transferir' en la misma rutina
do total^factura()
// llama a 'total' en la rutina 'factura'
Si el procedimiento o subrutina devuelve un valor que es de interés, se debe utilizar la sintaxis
de llamada a función "$$".
set x=$$total^factura()
// llama al mismo procedimiento 'total' pero usa
el valor de retorno
Las rutinas pueden editarse y compilarse utilizando Caché Studio.
36
Métodos de objeto
Las definiciones de clases y el código de sus métodos se almacenan en archivos de datos globales,
y el compilador de clases compila cada clase en una o más rutinas. Cada método es simplemente
un procedimiento dentro de una rutina, aunque sólo puede invocarse mediante sintaxis de objetos.
Por ejemplo, si la clase Paciente define un método Admitir y la variable Pac identifica un objeto
Paciente específico, para llamar al método Admitir de ese objeto utilizamos la sintaxis siguiente:
do Pac.Admitir()
// Llama al método admitir del Paciente
set x = Pac.Admitir()
// Llama al mismo método pero utiliza
el valor de retorno
Procedimientos y variables públicas/privadas
Un procedimiento es un bloque de código dentro de una rutina, similar a una función en otros
lenguajes. Un procedimiento consta de un nombre, una lista formal de parámetros, una lista de
variables públicas y un bloque de código delimitado por '{}'. Por ejemplo:
Admitir(x,y)[nombre,numreg] { ...del procedimiento código }
En Caché ObjectScript, algunas variables son comunes y otras son privadas para un procedimiento particular. Todas las variables utilizadas dentro de un procedimiento se consideran privadas
para ese procedimiento a menos que aparezcan listadas en la lista pública. En el ejemplo anterior,
'nombre' y 'numreg' referencian variables públicas mediante esos nombres, mientras que el resto
de variables sólo existen durante la invocación del procedimiento. Los nombres de variable que
comienzan con el carácter '%' son siempre públicas de forma implícita.
Los procedimientos no pueden anidarse, aunque un procedimiento puede contener subrutinas.
Subrutinas
Las rutinas también pueden contener subrutinas, que son más ligeras que los procedimientos.
Una subrutina puede contener una lista de parámetros y también puede devolver un valor, pero
no tiene una lista pública ni una estructura de bloque formal. Las subrutinas pueden estar
embebidas en procedimientos o estar al mismo nivel que un procedimiento de una rutina.
Las subrutinas permiten llamar al código utilizando el mismo conjunto de variables públicas/privadas que el procedimiento/rutina llamante y pueden llamarse más rápidamente. Una subrutina
embebida en un procedimiento utiliza el mismo ámbito de variables que el procedimiento y sólo
puede llamarse desde ese mismo procedimiento. Todas las referencias a variables de una subrutina que no forma parte de un procedimiento son a variables públicas.
37
Capítulo 3
Basic
Quizás Basic sea el lenguaje de programación de aplicaciones más conocido del mundo. En
Caché, Basic se ha ampliado para dar soporte al acceso directo de las estructuras de datos del
núcleo del Servidor de Aplicaciones (arrays multidimensionales) y a otras características del
Servidor de Aplicaciones de Caché. Soporta directamente el modelo de objetos de Caché utilizando sintaxis Visual Basic y se ejecuta en la Máquina Virtual de Caché.
Basic se puede utilizar tanto en métodos de clases o como rutinas de Caché (consulte la descripción de rutinas de Caché ObjectScript). Basic puede llamar a Caché ObjectScript y viceversa,
accediendo ambos lenguajes a las mismas variables, arrays y objetos en la memoria de proceso.
Las arrays se han ampliado para ser aún más potentes:
■ La presencia de un carácter '^' delante del nombre de la array indica una referencia a una
array multidimensional de la base de datos (arrays persistentes que se comparten con
otros procesos).
■ Los subíndices pueden ser de cualquier tipo de datos: cadenas, enteros, números decimales, etc.
■ Los datos pueden almacenarse en múltiples niveles de subíndice en la misma array. Por
ejemplo, los datos podrían almacenarse en A("colores") y A("colores",3).
■ No es necesario declarar las arrays y siempre son sparse (Caché sólo reserva espacio
cuando se insertan los nodos).
■ Una función Traverse permite identificar el subíndice siguiente (o anterior) en un nivel
de subíndice determinado.
Entre las otras extensiones se incluyen:
■ Comandos de proceso de transacciones para iniciar, completar o
deshacer una transacción.
■ Una función de incremento atómico que puede utilizarse sobre la
base de datos.
■ Extensiones que proporcionan una mejor integración con las posibilidades del Servidor de Aplicaciones de Caché.
38
Acceso mediante objetos con Basic
En Caché, las clases se organizan en paquetes y los nombres de clase incluyen el nombre del paquete seguido de un punto. Por ejemplo, Ejemplo.Persona es una clase Persona del paquete Ejemplo.
El comando New de Basic se utiliza para crear un objeto. Basic se ha ampliado con un comando
OpenID para acceder a un objeto existente:
persona = New Ejemplo.Persona()
// crea un nuevo objeto Persona
persona = OpenID Ejemplo.Persona(54)// abre el objeto Persona que tiene
el OID 54
Estos son algunos ejemplos de código para acceder a las propiedades de la persona:
persona.Nombre = "Sánchez, Luis"
// define el nombre de la persona
persona.Casa.Ciudad
// hace referencia a la ciudad donde vive la persona
persona.Empresa.Nombre
// almacena el objeto empresa de la persona en
// memoria y accede al nombre de la empresa
Las clases de la base de datos pueden guardarse en disco con el método Save. Por ejemplo:
persona.Save()
guardará la persona, creando un id de objeto si es la primera vez que se almacena el objeto. Si
además se han modificado los objetos relacionados (como Empresa), también se guardan
automáticamente.
39
Capítulo 3
MVBasic
MVBasic es otro lenguaje de script incluido en Caché, y se trata de una variante de Basic. Sin
embargo, está pensado para ejecutar aplicaciones escritas para sistemas MultiValue (Pick) y, por
tanto, soporta características adicionales, que incluyen la posibilidad de acceder y manipular
archivos MultiValue.
MVBasic se puede utilizar tanto en métodos de clases como en rutinas de Caché (consulte la
descripción de rutinas de Caché ObjectScript). MVBasic puede llamar a Caché ObjectScript o a
Basic, y viceversa, accediendo los tres lenguajes a las mismas variables, arrays y objetos de la
memoria de proceso.
Caché MVBasic tiene las mismas extensiones que Caché Basic, incluyendo el acceso a objetos. Sin
embargo, debido a una posible ambigüedad, se utiliza la secuencia de dos caracteres “->” en lugar
de un punto “.” separador en las referencias a objetos.
C++
Todas las clases de Caché pueden proyectarse como una clase C++, con métodos que se corresponden con cada propiedad y método de la clase Caché. Para los programas C++ estas clases son
iguales que cualquier otra clase local C++ y Caché maneja automáticamente todas las comunicaciones entre el cliente y el servidor. Las propiedades de la clase se almacenan en memoria intermedia cache en el cliente y las llamadas al método C++ invocan a los métodos correspondientes del
servidor, incluidos los métodos que almacenan un objeto en la base de datos y posteriormente lo
recuperan.
Java
Java es un lenguaje de programación orientado a objetos muy conocido, pero debido a su flexibilidad, basada en escribir una vez y realizar su desarrollo en cualquier lugar, no especifica cómo se
escriben o se leen los datos en una base de datos. Cuando es necesario que los datos sean persistentes, los desarrolladores de Java deben elegir e implementar métodos de acceso a los datos.
Caché proporciona varias maneras de acceso a su base de datos con Java:
■ JDBC proporciona acceso SQL de alto rendimiento utilizando un controlador completamente basado en Java (tipo 4).
■ Todas las clases de Caché pueden proyectarse como una clase de Java, de manera que
pueda accederse a las propiedades y métodos como objetos de Java.
■ La tecnología de InterSystems Jalapeño crea clases Caché a partir de clases Java. Caché
proporciona automáticamente métodos para almacenar y recuperar objetos de la base de
datos sin tocar las clases del desarrollador.
■ Caché eXTreme for Java expone datos de Caché mediante JNI (interfaz nativa de Java).
■ El API Java Persistent (JPA) se activa con implementaciones de Hibernate y EclipseLink
para proporcionar soporte de la persistencia de Java EE estándar.
40
Caché eXTreme for Java
Caché eXTreme for Java expone funciones de negocio y de alto rendimiento
de Caché a Java mediante JNI (interfaz nativa de Java). Activa la comunicación
“en proceso” entre Java y Caché‚ proporcionando así un almacenamiento y
recuperación de datos de una latencia extremadamente baja.
Caché eXTreme for Java ofrece a los desarrolladores una API (interfaz de programación de aplicaciones) Java que proporciona comunicación en proceso para:
■ Almacenamiento y recuperación de datos relacionales mediante JDBC
(JDBC por JNI)
■ Almacenamiento y recuperación de objetos Java
■ Almacenamiento y recuperación de datos multidimensionales
La opción de la API Globals proporciona a los desarrolladores de Java un acceso directo a las eficaces estructuras de datos multidimensionales de Caché.
Caché eXTreme for Java Architecture
Las ventajas de Caché
Persistencia de muy alto
rendimiento: Caché eXTreme for
Java acelera la E/S de la base de
datos para las aplicaciones Java.
Esto será especialmente beneficioso al generar o mejorar aplicaciones de Java que trabajen con
datos en transmisión, volúmenes
de datos muy grandes o datos que
cambian con rapidez.
Varias modalidades de acceso a
datos: Caché eXTreme for Java
proporciona una rápida comunicación “en proceso” entre Java y
Caché mediante JDBC, el acceso de
objetos o el acceso multidimensional directo.
Curva de aprendizaje breve:
Caché eXTreme para Java utiliza
estándares de Java para proporcionar acceso a la base de datos, de
manera que los desarrolladores de
Java puedan trabajar sobre todo
dentro de un entorno de Java.
Normalmente, un desarrollador de
Java con un año de experiencia
puede ser productivo en sólo unos
días al utilizar Caché eXTreme.
Activación de la persistencia para aplicaciones CEP basadas en Java
La mayoría de aplicaciones CEP (proceso de eventos complejos) no pueden
utilizar bases de datos persistentes porque la latencia introducida almacenando información en el disco o recuperándola de éste es demasiado grande. En
lugar de ello, suelen utilizar bases de datos en memoria y corren el riesgo de
perder datos o transacciones. Pero utilizando Caché eXTreme for Java‚ las aplicaciones CEP basadas en Java pueden persistir sin sacrificar el rendimiento.
41
Capítulo 3
Caché y .NET
Las ventajas de Caché
Servir datos rápidamente: Las
aplicaciones Web que utilizan
Caché como servidor de datos se
benefician del alto rendimiento y
la escalabilidad masiva proporcionada por el motor de datos
multidimensional de Caché.
Desarrollo .NET más rápido:
Los desarrolladores son más productivos cuando trabajan con sus
herramientas favoritas en entornos
que son familiares para ellos.
Caché soporta una amplia variedad
de tecnologías y herramientas de
desarrollo comunes gracias a SQL y
el acceso a datos de objetos.
Caché funciona perfectamente con .NET debido a su acceso a los datos abierto y flexible. Existen varias formas de conectarlos, incluidos objetos, SQL,
XML y SOAP. Los desarrolladores pueden crear aplicaciones con las tecnologías que prefieran, beneficiándose todas ellas del rendimiento y escalabilidad superiores de Caché
ADO.NET
ADO.NET es la nueva encarnación de ADO, optimizada para su utilización en
la estructura de .NET. Su finalidad es crear aplicaciones .NET “independientes
de la base de datos”, y generalmente utiliza SQL para comunicarse con las
bases de datos. Mediante el acceso relacional a los datos, Caché proporciona
soporte nativo para ADO.NET. También soporta ODBC.NET de Microsoft y la
conectividad de sólo lectura SOAP integrada en ADO.NET.
Servicios Web
Hay dos formas de utilizar los servicios Web en .NET. Una es enviar documentos XML sobre HTTP. La otra es utilizar el protocolo SOAP para simplificar el
intercambio de documentos XML. En ambos casos funciona perfectamente
con los servicios Web de .NET porque Caché puede mostrar los datos como
documentos XML o SOAP.
Objetos gestionados por Caché
Caché puede generar automáticamente “assemblies” .NET (o de código
fuente C#) a partir de clases Caché. Un plugin para Visual Studio permite a
los desarrolladores que prefieran ese entorno acceder fácilmente a los objetos de Caché.
42
Caché y XML
Al igual que HTML es un lenguaje de marcas compatible con Internet para mostrar datos, XML es
un lenguaje de marcas para intercambiar datos entre aplicaciones. Mediante XML, distintas aplicaciones (dentro de una misma empresa o en diferentes) pueden compartir datos a través de una
red. La estructura de los datos XML es jerárquica y multidimensional, convirtiéndose en una unión
natural con el motor de datos multidimensional de Caché.
Caché proporciona una interfaz bidireccional fácil de utilizar con XML que evita a los desarrolladores
la necesidad de crear manualmente una "capa de mapeo" de proceso entre los datos XML y la base
de datos.
Exportación de XML
Todo lo necesario para que una clase de Caché sea compatible con XML, es hacer que herede de la
clase %XMLAdaptor incluida en Caché. Esto proporciona todos los métodos necesarios para:
■ Crear una Definición de Tipo de Documento (DTD) o un Esquema XML para la clase. Las
DTDs y los Esquemas son documentos que definen la estructura de los datos XML. Caché
generará automáticamente DTDs y Esquemas XML, pero los desarrolladores que deseen
personalizar el formato XML de una clase pueden hacerlo.
■ Formatear datos automáticamente (instancias de la clase) como XML, según la DTD o
Esquema definido.
Importación de XML
Caché incorpora otras clases que proporcionan métodos que permiten a los desarrolladores:
■ Importar Esquemas XML y crear automáticamente las clases de Caché correspondientes.
■ Importar los datos de los documentos XML como instancias de las clases de Caché, mediante
una API sencilla.
■ Analizar y validar documentos XML mediante un analizador XML (SAX) integrado.
43
Capítulo 3
Caché y Servicios Web
Las ventajas de Caché
Conectividad sencilla con XML:
Caché aprovecha las ventajas de sus
posibilidades de herencia múltiple
para proporcionar a cualquier clase
de Caché una interfaz bidireccional
con XML. El resultado: las clases de
Caché pueden convertirse fácil y rápidamente en documentos y esquemas
XML. De forma similar, los esquemas
y documentos XML pueden convertirse en definiciones de clases y objetos de Caché.
Servicios web instantáneos: Puede
publicarse cualquier clase Caché como
un servicio web con sólo hacer clic
varias veces. Caché genera de forma
automática el descriptor WSDL y el
sobre formateado en SOAP.
Servicios web seguros: Caché proporciona características que permiten
asegurar con facilidad la integridad y
la confidencialidad de los servicios
web. Su uso del marco WS-Policy simplifica en gran medida la tarea de asegurar los servicios web.
Desarrollo rápido de aplicaciones
XML más rápidas:
Los desarrolladores no necesitan
codificar manualmente un "mapa"
que traduzca entre XML y la base de
datos de Caché porque las estructuras de datos multidimensionales
nativas de Caché son perfectas para
los documentos XML. Por lo tanto, las
aplicaciones preparadas para XML se
desarrollan más rápidamente. Y con
menos carga de proceso también se
ejecutan más rápido.
44
Los Servicios Web permiten compartir la funcionalidad de las aplicaciones sobre Internet, así como dentro de una organización o sistema. Los
Servicios Web tienen una interfaz descrita en WSDL (Lenguaje de
Definición del Servicio Web) y devuelven un documento XML formateado
según el protocolo SOAP.
Caché permite que cualquier método de clase, procedimiento SQL almacenado y consulta sean mostrados automáticamente como un Servicio Web.
Caché genera el descriptor de WSDL para el servicio y, cuando se invoca
el servicio, envía una respuesta debidamente formateada como
SOAP/XML. Caché también facilita el desarrollo rápido generando
automáticamente una página Web para probar el servicio, sin la necesidad de construir una aplicación cliente.
Cómo asegurar los servicios web
Los servicios web representan “datos en movimiento” y pueden proceder de fuentes
“desconocidas”. Por lo tanto, requieren medidas de seguridad especiales.
Caché admite el uso de SSL y TLS para asegurar las conexiones. En cuanto a los servicios
web propiamente dichos, la información proporcionada con el “sobre” del servicio debe
permitir al destinatario verificar de quién procede el servicio web y que no se ha manipulado en su recorrido, así como descifrar su contenido.
Caché implementa muchas características resaltadas en las especificaciones de WSSecurity publicadas por la organización de estándares OASIS-Open:
■ Cabecera de WS­Security
• Proporciona integridad de mensajes
La cabecera de seguridad se añade a la cabecera de un mensaje SOAP. Contiene
toda la información relacionada con la seguridad del mensaje, como los tokens
(nombre de usuario, seguridad binaria, marca de tiempo), los elementos de firma y
los elementos clave cifrados.
■ Lista de firmas XML
• Proporciona integridad de mensajes
Permite verificar de quién procede un servicio web.
■ Soporte de token de WS­Security
• Tokens de nombre de usuario
Permite verificar la identidad para los servicios web que requieren autenticación.
• Tokens de seguridad binarios
Se utilizan como referencias para la firma y los elementos de claves cifrados.
■ Encriptación de XML
• Proporciona confidencialidad de mensajes
Configuración de la seguridad para los servicios web
Para facilitar la configuración y gestión de la seguridad de los servicios web, Caché utiliza
el marco de WS-Policy establecido por el consorcio World Wide Web (W3C). Se proporciona un asistente que ayuda a los desarrolladores de aplicaciones a generar un marco
WS-Policy con eficacia. Incluye varias opciones para seleccionar los detalles de la política.
Registro SOAP
A menudo resulta útil registrar o rastrear mensajes SOAP de manera que se pueda “ver” lo
que se ha enviado por este medio. El registro SOAP de Caché puede (si así se desea) capturar mensajes entrantes y salientes, así como información de seguridad.
45
Capítulo 3
Caché y MultiValue
Las ventajas de Caché
Nueva vida para aplicaciones
antiguas: Caché facilita la modernización de aplicaciones
MultiValue antiguas mediante
interfaces con navegador, acceso a
objetos, SQL robusto y servicios
Web. Las aplicaciones MultiValue
pueden ahora funcionar en una
base de datos avanzada que sea
bien aceptada en entornos exigentes y en constante evolución.
Crear nuevas aplicaciones rápi­
damente: Dado que MultiValue
está implementado en Caché como
un lenguaje y un acceso a ficheros,
todas las posibilidades nativas de
Caché se pueden utilizar para crear
rápidamente nueva funcionalidad.
Los programadores de Multivalue
pueden empezar a aprovechar la
programación de objetos e interactuar fácilmente con otras aplicaciones, y seguir utilizando a la vez
el lenguaje MVBasic.
Alto rendimiento y escalabilidad
con excelente fiabilidad para
usuarios de MultiValue: Caché
proporciona rendimiento y escalabilidad muy superiores para los
usuarios de MultiValue. Además,
Caché se utiliza en entornos críticos de utilización ininterrumpida,
como en los hospitales, donde no
hay opción para las interrupciones.
Caché proporciona sofisticados
registros diarios, proceso de
transacciones, “base de datos
blindada” y configuraciones
tolerantes ante fallos.
46
Caché proporciona todas las funciones necesarias para desarrollar y ejecutar
aplicaciones MultiValue (a las que a veces se hace referencia como aplicaciones basadas en Pick), que incluyen lo siguiente de MultiValue:
■ Lenguaje MVBasic
■ Acceso a los ficheros
Se puede acceder a los ficheros de MultiValue mediante programas
MultiValue con las sentencias MVBasic OPEN/READ/WRITE y las
consultas MultiValue normales. También son accesibles mediante
MVBasic y otros lenguajes a través de todos los mecanismos normales de Caché, como el acceso de objetos, el acceso directo de
arrays multidimensionales y SQL.
■ Lenguaje de consulta
El lenguaje de consulta MultiValue de Caché (CMQL) proporciona funciones de selección de datos y de formato de informes para los
ficheros de MultiValue. Dado que estas consultas utilizan el motor SQL
de altísimo rendimiento de Caché, la fiabilidad aumenta, se optimiza
la ejecución y se puede utilizar un sofisticado conjunto de funciones
de indexación.
■ Diccionario de datos (estructuras de 7 y 10 líneas)
Un fichero de MultiValue puede tener una descripción de fichero
correspondiente en el Diccionario de datos de MultiValue, que es
directamente editable con código MVBasic y el editor “ED” de
MultiValue tradicional. Un fichero de MultiValue también puede
tener su definición de clase correspondiente de Caché. Una definición de clase es esencial si los datos van a estar disponibles para el
acceso mediante objetos o SQL.
■ “Procs”, párrafos y frases
■ Entorno de comandos
El entorno de comandos de MultiValue se puede ejecutar desde un
entorno de terminal. Además de las funciones habituales del entorno
de comandos de MultiValue, Caché permite ejecutar comandos de
MVBasic directamente en el entorno de comandos.
Esta funcionalidad de MultiValue se proporciona como una parte integral de
Caché, no como una implementación independiente de MultiValue, y utiliza
el potente motor de base de datos multidimensionales, la funcionalidad de
tiempo de ejecución y las tecnologías de desarrollo de Caché. Eso significa
que los usuarios de MultiValue pueden aprovechar al completo todas las funciones de Caché.
Migración de aplicaciones a Caché
Caché incluye prestaciones y utilidades que pueden ayudarle a migrar las aplicaciones existentes de diversas tecnologías a Caché. Permite mantener los
datos existentes y aprovechar el código existente, y a la vez lograr las funciones de rendimiento, escalabilidad y avanzadas de Caché.
Migración de tecnologías relacionales
Caché incluye la implementación especializada de SQL para ayudarle a importar sus aplicaciones desde:
■ Microsoft SQL Server y Sybase Adaptive Server
Caché TSQL es una implementación de Transact-SQL. Soporta muchas
de las características de las implementaciones de Microsoft y Sybase.
■ Informix
Caché ISQL es una implementación de Informix ISQL. Soporta
numerosas características de Informix ISQL.
Caché incluye clases de nivel de sistema para importar y compilar DDL, DML y
procedimientos almacenados. Existe un asistente de migraciones de datos para
importar los datos existentes a Caché.
Migración desde tecnologías MultiValue
Caché admite migraciones desde todos los entornos de MultiValue populares,
incluidos Universe, Unidata, JBASE, D3 y Reality.
■ Las arrays multidimensionales de Caché (“globals”) son un superconjunto de ficheros de MultiValue, así que es fácil migrar datos existentes y
esquemas de la tecnología de MultiValue a Caché.
■ Caché MVBasic es una implementación altamente optimizada del
lenguaje de programación Basic utilizado en las aplicaciones de
MultiValue. Las diferencias de dialectos se ajustan mediante interrup-
Las ventajas de Caché
Migraciones más fáciles: Las
utilidades y los asistentes facilitan
al máximo las migraciones desde
tecnologías relacionales o de
MultiValue.
Rendimiento más alto: Se ha
demostrado que las aplicaciones
basadas en Caché ejecutan SQL
hasta cinco veces más rápido que
las aplicaciones basadas en la tecnología relacional.
Más opciones para su desarrollo
futuro: Cuando la migración se ha
completado, puede seguir mejorando sus aplicaciones utilizando toda
la gama de funciones de Caché, como
la tecnología InterSystems Zen, el
desarrollo orientado a objetos o la
tecnología iKnow, entre otras.
Escalabilidad, seguridad y versa­
tilidad mejoradas: Las aplicaciones basadas en Caché pueden
aprovechar funciones como
Enterprise Cache Protocol (ECP), el
modelo de seguridad de Caché y la
creación de copias o “Mirrors”.
tores de emulación, lo cual minimiza los cambios de código necesarios al
realizar migraciones.
■ Caché ofrece CMQL, un lenguaje de consulta de MultiValue implementado
en nuestro motor de consultas SQL altamente optimizado.
47
Capítulo 4
Creación rápida de aplicaciones web completas con
la tecnología InterSystems Zen
Muchas de las aplicaciones actuales ofrecen una interfaz de usuario que se ejecuta en un navegador web. Y muchas de esas interfaces son tan completas y sofisticadas como las de las aplicaciones desplegadas en un escritorio de ordenador. Caché incluye la tecnología InterSystems
Zen™, que permite crear aplicaciones de bases de datos web completas en un tiempo récord.
Tecnología CSP
Nuestra tecnología Caché Server Pages (CSP) es la base de Zen y proporciona los mecanismos
necesarios para ejecutar aplicaciones web. Algunas de las características de Caché Server Pages
son estas:
■ Páginas de servidor dinámicas: Las páginas se crean dinámicamente en el servidor de
aplicaciones mediante el código de la aplicación, en lugar de tener un servidor web que
simplemente devuelve HTML estático. Las aplicaciones responden rápidamente a distintos
tipos de solicitudes y adaptan las páginas resultantes que se envían de vuelta al navegador.
■ Modelo de sesión: Todo el proceso relacionado con las páginas de un solo
navegador se considera parte de una sesión, desde la primera solicitud del
navegador hasta que la aplicación termine o exceda el tiempo de respuesta
(timeout).
■ Conservación del estado del servidor: En una sesión, los datos de la aplicación que están en el servidor (e incluso el contexto completo de la aplicación) se pueden conservar automáticamente en las solicitudes del navegador, facilitando el desarrollo y la ejecución de aplicaciones complejas.
■ Autenticación del usuario: Puede utilizarse cualquiera de los mecanismos
de autenticación de Caché.
■ Encriptado: Caché encripta automáticamente todos los datos de la URL, para
ayudar a autentificar las solicitudes y evitar la manipulación. La clave del
encriptado se conserva únicamente en el servidor, y sólo es válida para el
transcurso de una sesión.
48
Arquitectura de clases de las páginas Web
En Caché, cada página web es un objeto, una instancia de una clase de página que contiene
métodos (código) para generar el contenido de la página. Normalmente las clases de página
proceden de una clase de página Web estándar denominada "%CSP.Page" que proporciona a
cada página varias posibilidades integradas, como la generación de cabeceras y el cifrado. Esta
arquitectura de clases facilita el cambio de comportamiento de una aplicación y la utilización de
un estilo común. También aporta todas las demás ventajas de la programación de objetos al
desarrollo para la Web.
En general, recomendamos que las páginas contengan sólo la lógica de la interfaz. Las reglas de
negocio y de la base de datos deben incluirse en clases distintas, de modo que exista una separación clara entre el código de la interfaz de usuario y la lógica de la base de datos, y que sea
más fácil añadir interfaces de usuario adicionales más adelante.
49
Capítulo 4
ZEN y páginas Web basadas en componentes
ZEN proporciona una forma sencilla de crear rápidamente aplicaciones Web complejas con un
aspecto visual sofisticado y una interfaz de usuario muy interactiva. ZEN no es 4GL, es una
biblioteca completa de componentes de objetos pre-construidos y herramientas de desarrollo
basadas en la tecnología CSP y de objetos de InterSystems. ZEN es especialmente apropiado
para desarrollar una versión Web de las aplicaciones cliente/servidor creadas originalmente
con herramientas como Visual Basic o PowerBuilder.
Los componentes de ZEN permiten una interacción mucho más dinámica. El usuario no está
limitado exclusivamente a los mecanismos de “remisión” para enviar valores al servidor. Por
ejemplo, con el componente de formulario de ZEN, podrá definir su propia validación personalizada, incluyendo llamadas inmediatas al servidor sin necesidad de tener que solicitar una
página y redibujarla a continuación. Para los usuarios, esto representa una forma más natural
de introducir los datos.
ZEN utiliza el mecanismo de gestión de sesiones de CSP que proporciona autentificación de
usuarios, cifrado de datos y retención de datos de sesión persistentes entre peticiones de páginas. Todas las comunicaciones entre el navegador y el servidor se producen mediante el envío
de objetos entre ellos utilizando una versión más sofisticada de la técnica a la que se suele hacer
referencia como AJAX (JavaScript asíncrono y XML).
Las páginas basadas en ZEN pueden entremezclarse fácilmente con páginas desarrolladas utilizando otras técnicas de CSP para el desarrollo Web.
¿Qué es un componente de ZEN?
Un componente de ZEN es una definición de clase que especifica el aspecto y comportamiento
del componente en la página. La definición de clase de ZEN contiene, en un único documento, la
definición completa de un componente, incluidas las hojas de estilo, el código del servidor y el
código del cliente.
En tiempo de ejecución, ZEN crea dos objetos de cada componente utilizado en la página. Un
objeto en el cliente, que ZEN crea automáticamente como un objeto JavaScript dentro del navegador, y un objeto en el servidor. ZEN gestiona automáticamente el estado de ambos objetos y
gestiona el flujo de información entre ellos.
Tipos de componentes de ZEN
La biblioteca de ZEN incluye componentes que implementan todos los tipos de controles HTML
estándar. Cuadros de entrada, cuadros de texto, botones, casillas de verificación, etc. Estos componentes tienen comportamientos adicionales heredados de la clase de controles de ZEN.
ZEN también incluye un conjunto de componentes más complejos que visualizan datos automáticamente de la base de datos y saben cómo actualizar estos datos dinámicamente en respuesta a
los eventos del usuario. Por ejemplo, el potente componente de tabla de ZEN visualiza automáticamente los datos dentro de una tabla HTML utilizando una consulta de la base de datos. El componente de tabla soporta paginado, desplazamiento, clasificación por columnas, filtrado y una
gran variedad de estilos. El contenido de la tabla puede renovarse desde el servidor sin necesidad
de redibujar toda la página.
50
Otros componentes de ZEN son:
■ Menús – Se admiten diversos tipos de menús.
■ Grids – Añada a la página Web un comportamiento similar a las hojas de cálculo.
■ Árboles – Los datos se visualizan de forma jerárquica con un control de árbol.
■ Fichas – Un componente de ficha contiene una serie de fichas, cada una de las cuales contiene otros componentes.
■ Gráficos – Con SVG se implementa un conjunto completo de componentes de gráficos,
que incluye gráficos de líneas, áreas, barras, circulares, máximo-mínimo y XY.
■ Dashboards Los velocímetros, indicadores, etc., le permiten visualizar los datos como
componentes visuales dinámicos.
Cambio del aspecto de los componentes de la biblioteca de ZEN
Todos los componentes de ZEN disponen de un conjunto de propiedades que controlan el aspecto. Las aplicaciones pueden definir estas propiedades en tiempo de ejecución para cambiar los
valores, el aspecto y el comportamiento de los componentes.
El aspecto visual también se controla mediante definiciones de estilos de CSS (Hojas de estilo en
cascada) estándar. Puede modificar estos estilos (para cambiar las fuentes, colores, tamaño, etc.)
a nivel de aplicación, página o en un componente individual.
Puede crear subclases de los componentes de la biblioteca de ZEN para modificar su aspecto y
comportamiento.
Creación de nuevos componentes de ZEN
Una de las principales ventajas de ZEN es la facilidad de creación de nuevos componentes.
Cada componente se implementa como una clase. Para crear un nuevo componente: (1) cree una
nueva clase de componente, que puede ser una subclase de un componente existente; (2) implemente un método que represente el contenido HTML del componente; (3) defina los métodos
del servidor y del cliente que implementan el comportamiento en tiempo de ejecución del componente; y (4) asegúrese de que la clase incluye las definiciones de estilos de CSS necesarias
para especificar el aspecto visual del componente.
Cómo localizar una aplicación ZEN a diferentes idiomas
Si se desea, ZEN mantiene automáticamente dentro de una tabla de localización especial un conjunto de todos los valores de texto (títulos, etiquetas, etc.) visualizados por los componentes
incorporados en la aplicación. Puede exportar la tabla de localización de la aplicación como un
documento XML, traducir los valores a otros idiomas e importar las nuevas tablas.
En tiempo de ejecución, ZEN utiliza los valores de texto basándose en la preferencia de idioma
actual del navegador del usuario.
51
Capítulo 4
Soporte de SVG
Las ventajas de Caché
Interfaces Web de usuario com­
pletas: Pueden generarse páginas
muy interactivas y visualmente
sofisticadas cuyo aspecto sea más
similar a las aplicaciones
cliente/servidor de la GUI que a un
formulario de navegador simple y
tradicional con un botón enviar. El
usuario encuentra el formato interactivo más natural y fácil de usar.
Los SVG (gráficos vectoriales escalables) proporcionan una forma estándar
y potente de visualizar datos gráficos dentro de una página Web. ZEN
incluye la capacidad de crear componentes gráficos que se representan a sí
mismos utilizando SVG e incluye un conjunto completo de componentes
pre-construidos basados en SVG.
¿Qué navegadores soporta ZEN?
ZEN trabaja con Firefox (v1.5 y superior) e Internet Explorer (v6.0 y superior). En el caso de Firefox, no son necesarios plugins, porque SVG está
incorporado. En el caso de Internet Explorer, se necesita el plugin SVG de
Adobe si desea utilizar componentes de SVG en ZEN. La biblioteca gestiona
las diferencias entre SVG de Firefox e Internet Explorer.
Zen Reports
Desarrollo rápido basado en
objetos: La utilización de componentes pre-construidos agiliza el
desarrollo y lo hace más fácil de
modificar en un futuro.
Interfaces de usuario coherentes:
La arquitectura basada en componentes facilita la definición y
cumplimiento de las directrices de
estilo y comportamiento en toda la
aplicación.
52
Zen incluye un marco ampliable para definir y generar informes personalizados. Un informe Zen (“Zen report”) es un tipo especial de clase Zen que permite especificar informes de bases de datos en XHTML o PDF. Nuestro editor
de formato gráfico ofrece un control de programación total sobre el formato
y el aspecto de los informes, y permite la inclusión de diagramas y gráficos
de Zen (estáticos). Los informes pueden publicarse en un navegador o
imprimirse, ya sea en el lado del servidor o en una impresora local. Con los
informes de Zen sus aplicaciones de Internet completas pueden reproducir
exactamente los informes que los usuarios están acostumbrados a ver, o
generar fácilmente nuevos informes útiles.
InterSystems Corporation
InterSystems Iberia S.L.
World Headquarters
Edificio Mónaco
One Memorial Drive
Avda. de Europa, 12
Cambridge, MA 02142-1356
Parque Empresarial de la Moraleja
Tel: +1.617.621.0600
28108 Alcobendas. Madrid
Fax: +1.617.494.1631
Telf: +34 91.484.18.80
Teléfono gratuito en Norteamérica
Fax: +34 91.662.60.84
+1.800.753.2571
InterSystems.es
InterSystems.com
InterSystems Caché e InterSystems Ensemble son marcas comerciales de InterSystems Corporation. InterSystems HealthShare es una marca comercial de InterSystems Corporation.
Otros nombres de producto son marcas comerciales de sus respectivos proveedores. Copyright © 2012 InterSystems Corporation. Todos los derechos reservados.D08-5/12
Descargar