• No se han encontrado resultados

Uso del SGBD-OR PostgreSQL para el trabajo con datos científicos

Los SGDB-OR actuales ofrecen nuevas posibilidades para el trabajo con datos científicos, que apenas comienzan a ser explotadas. Una característica importante en la actualidad es la extensión de los Sistemas de Bases de Datos para unificar las Bases de Datos con los lenguajes de programación, así como poder vincular nuevos tipos de objetos en los Sistemas de Gestión de Datos y así lograr esta unión (Musick, 1998).

El PostgreSQL es un SGBD-OR de código abierto que posibilitó el desarrollo de soluciones corporativas con una mejor relación “costo por beneficios”. Un punto fuerte de este SGBD es su capacidad de tratar grandes volúmenes de datos con escalabilidad, o sea, su arquitectura puede ser continuamente ampliada de acuerdo con la demanda de los usuarios.

Su extraordinario soporte que incluye desde reporte y recuperación de fallas, instrucciones sobre como usar tal o cual característica y optimización de consultas convierten a PostgreSQL en un DBMS de nivel empresarial, que puede ser usado en casi todo tipo de sistemas (desde los más comunes sistemas de facturación hasta los más complejos sistemas científicos), conservando el alto rendimiento sin sacrificar la estabilidad ni la integridad de los datos.

2.1- PostgreSQL.

PostgreSQL tiene más de 15 años de desarrollo activo y se ha ganado la reputación de ser confiable. De hecho, hay compañías que aseguran haber tenido corriendo PostgreSQL en producción durante varios años y con altas tasas de actividad sin haber experimentado problemas de ningún tipo y mantener la integridad de los datos. Además corre en la mayoría de los Sistemas Operativos más utilizados incluyendo, Linux, varias versiones de UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, SunOS, Tru64), BeOS y Windows.

Por si eso fuera poco, cumple la prueba ACID (Atomicity, Consistency, Integrity, Durability) y tiene soporte completo para llaves foráneas, joins, vistas, subconsultas (incluyendo subconsultas en la cláusula FROM), triggers, y procedimientos almacenados (en varios lenguajes). Incluye la mayoría de los tipos de datos de los estándares SQL92 y SQL99 (INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, TIMESTAMP, entre otros). También

soporta almacenamiento de objetos grandes (imágenes, sonido y video), así como sus propias interfaces de programación para C/C++, Java, Perl, Python, Ruby, Tcl, ODBC, entre otros, y una documentación muy completa.

2.1.1- Características del PostgreSQL.

PostgreSQL se ha preocupado por ser una solución real a los complejos problemas del mundo empresarial y a la vez mantener la eficiencia al consultar los datos. Con ese fin, se han desarrollado y añadido a PostgreSQL las más interesantes y útiles características que antes sólo podían hallarse en sistemas manejadores de bases de datos comerciales con costos muy elevados; lo cual lo coloca, como su lema indica, como "el manejador (o gestor) de bases de datos de código abierto más avanzado del mundo".

Algunas de las características que posee PostgreSQL son:

 Control de concurrencia multi-versión (MVCC), que sirve para lograr un control de concurrencia tan eficiente que en la gran mayoría de los casos no se requiere de bloqueos).  Herencia de tablas (aunque la orientación a objetos no está completa esta característica se la puede utilizar para lograr el particionamiento de tablas en varios discos mediante una técnica llamada "restricciones excluyentes").

 El sistema de reglas (el sistema re-escritor de consultas), permite identificar ciertas acciones sobre una tabla y reemplazarlas por otras o ejecutar adicionales (podemos, por ejemplo, crear una regla para que al hacer INSERT sobre una vista se reemplace por un INSERT sobre la tabla en la que se basa la vista, dando así la impresión de vistas actualizables).

 Varios lenguajes procedurales como: Java, Perl, Python, Ruby, Tcl, C/C++, así como su lenguaje nativo (PL/PGSQL) que es muy similar al PL/SQL de Oracle.

 Su arquitectura extremadamente modular, facilitando el trabajo de los desarrolladores que desean implementar nuevas funcionalidades.

 Posee módulos contribuidos entre los que se cuentan OpenFTS, que es un método para indexación de texto completo y PostGIS, que añade objetos geográficos lo cual permite a PostgreSQL ser usado en proyectos de bases de datos para sistemas de información

geográfica, por ejemplo los que usan sistemas repartidores. También cuenta con módulos de criptografía (SHA1, MD5).

 Permite la creación de tipos de datos personalizados.

 Escritura adelantada de registros (WAL) para evitar perdidas de datos en caso de falla de energía, fallos del Sistema Operativo, y fallas de hardware.

 Juegos de caracteres internacionales, codificación de caracteres multibyte y Unicode; características para la integridad de los datos, tales como: claves primarias, llaves foráneas con capacidad de actualizar en cascada o restringir la acción en caso que existan hijos, restricción check, restricción de unicidad y restricción not null; todas las restricciones se pueden postergar hasta el momento de terminar la transacción.

 Interfaces de programación para Java (JDBC), ODBC, Perl, Python, Ruby, C, C++, PHP, Lisp, Scheme, y Qt solo para nombrar algunas.

La implementación se sujeta fuertemente a los estándares ANSI-SQL 92/99 (y últimamente se han añadido características del SQL2003). Este recurso permite una gran facilidad en la migración de datos de otras bases que también sigan el ANSI SQL. Es altamente escalable; tanto en lo que se refiere a cantidad de datos que puede manejar (se reportan ambientes de producción activos que manejan incluso más de 4 Terabytes); así como, al número de usuarios concurrentes que puede acomodar.

2.1.2 – Capacidad del PostgreSQL.

A continuación se muestran algunos valores límites de PostgreSQL:

 Tamaño de una base de datos Ilimitada (limitada solo por el espacio en disco).  Tamaño de una tabla 32 Terabytes.

 Tamaño de una fila 1.6 Terabytes.  Tamaño de un campo 1 Gigabyte.

 Número de filas en una tabla Ilimitada (limitada solo por el espacio en disco).  Número de columnas en una tabla de 250 - 1600 dependiendo de los tipos de datos.  Número de índices en una tabla Ilimitada (Limitada sólo por el espacio en disco).

Por todo esto y más, PostgreSQL se ha ganado la admiración y el respeto de sus usuarios, así como el reconocimiento de la industria (ganador del Linux New Media Award for Best Database

System y 3 veces ganador del The Linux Journal Editors' Choice Award for best DBMS).

2.1.3 - Uso del PostgreSQL.

En la página de PostgreSQL se pueden encontrar algunos casos de estudio de empresas que han optado por PostgreSQL y se están recopilando más experiencias que se irán añadiendo a la página. Además es un secreto a voces (los que dudan pueden usar google para confirmar) que los dominios .ORG y .INFO corren bajo postgres, tambien la página TravelPost.com y Rambler.ru, así como ciertas agencias gubernamentales de Estados Unidos tales como: City of Garden Grove, CA; National Gallery; Media Library project of the Library of Congress; US Army; Dept of Forestry; State of California; NCSA; National Weather Hidrology Laboratory; The Oxford University Computing Services; Sandia Labs, sólo por mencionar algunos pero se pueden encontrar aún más alrededor del mundo.

2.1.4 - Soporte para PostgreSQL.

PostgreSQL esta soportado por diferentes proveedores, entre los que se encuentran:  El soporte de la comunidad. El principal soporte de PostgreSQL lo provee la

comunidad a través de las listas de correo (lo esperamos en la lista en español) y los canales de IRC (también tenemos nuestro canal en español).

 El soporte comercial. También existen varias empresas que proveen soporte comercial para PostgreSQL , entre las que tenemos: Fujitsu (Australia); Hub.org (Canadá);

PostgreSQL, Inc. (Canadá); credativ GmbH (Alemania); Afilias Limited (Irlanda);

Software Research Associates (Japón, con subsidiarias en USA); Delta-Soft LLC (Rusia); 2ndQuadrant (Reino Unido); 800 Pound Gorilla (USA); Command Prompt, Inc. (USA); EnterpriseDB (USA); Greenplum (USA); Pervasive Software, Inc. (USA); RedHat, Inc. (USA) y, hace unos días atrás, Sun Microsystems anunció que daría soporte a sus usuarios de Solaris. Hace poco SRA comentó su deseo de ingresar al mercado latino-americano.  El soporte a nivel individual.

2.1.5 - Tipos de Datos.

PostgreSQL tiene un amplio surtido de tipos de datos nativos disponibles (Figura 17. Tipos de Datos disponibles en PostgreSQL.). Los usuarios, pueden además añadir nuevos tipos de datos usando el comando CREATE TYPE.

Figura 17. Tipos de Datos disponibles en PostgreSQL.

Internamente PostgreSQL usa identificadores de objetos (OID) como llaves primarias para varias tablas del sistema. Los OID no se añaden a las tablas creadas por los usuarios, a menos que se especifique la cláusula WITH OIDS cuando se crea la tabla, o que esté habilitada la variable de entorno default_with_oids.

El tipo OID se implementa realmente como un entero de cuatro bytes sin signo, por tanto no es suficientemente grande como para proporcionar una identificación única en bases de datos grandes, o incluso en grandes tablas individuales, debido a esto se recomienda usar los OID solo como referencias de las tablas de Sistemas.

El Sistema PostgreSQL contiene varias entradas de propósito especial llamadas colectivamente pseudo-tipos. Un pseudo-tipo no puede usarse como un tipo de dato de una columna, pero puede ser declarado como argumento o valor de retorno de una función. Cada uno de los pseudo-tipos es útil en situaciones donde el comportamiento de una función no corresponde a simplemente tomar o devolver un valor de un tipo de dato específico de SQL.

Las funciones escritas en C pueden declararse para aceptar o devolver cualquiera de estos pseudo-tipos. Depende del programador asegurar que la función se comportará adecuadamente cuando se usa un pseudo-tipo como argumento. En la actualidad la mayoría de los lenguajes procedurales prohíben el uso de pseudo-tipos como argumentos o retorno.

El pseudo-tipo interno se usa para declarar funciones que sólo tienen significado al ser llamadas internamente por el sistema de bases de datos, y no mediante invocación directa en una consulta SQL, de ahí que si una función tiene al menos un argumento de tipo interno no pueda llamarse desde SQL.

2.1.6 - Extensibilidad de PostgreSQL para el almacenamiento de datos científicos.

PostgreSQL se diseñó desde el inicio para ser extensible, por esta razón las extensiones cargadas en su base de datos pueden funcionar de igual forma que las incluidas en su paquete original. Existen una serie de características que han hecho que PostgreSQL pueda ser fácilmente extensible para trabajar con datos científicos, algunas de estas son:

 PostgreSQL tiene una amplia gama de tipos de datos nativos disponibles. Los usuarios pueden añadir además nuevos tipos de datos.

 PostgreSQL proporciona un número grande de funciones y operadores integrados con los tipos de datos. Los usuarios pueden también definir sus propias funciones y operadores.

 PostgreSQL tiene la posibilidad de manejar diferentes tipos de datos complejos, en particular el empleo de arreglos multidimensionales es muy común.

 En muchas ocasiones los datos científicos son de gran volumen y se necesita desarrollar aplicaciones en red que permitan realizar consultas a un servidor centralizado de gran capacidad, PostgreSQL facilita estas operaciones.

 En PostgreSQL está presente la herencia, que es un concepto de las Bases de Datos Orientadas a Objetos y que abre nuevas posibilidades de interés para al diseño de estas.

 Existe una interfaz de programación escrita en C que interactúa con PostgreSQL (Libpq). Está implementada como un conjunto de bibliotecas de funciones que permiten a los programas clientes hacer consultas al motor de Bases de Datos de PostgreSQL y recibir los resultados de estas consultas. Libpq permite además a PostgreSQL interactuar con aplicaciones escritas en otros lenguajes como: C, Perl, Python, Tcl y ECPG.

 En general el rendimiento de PostgreSQL es similar al de otros SGBD, sin embargo resulta mucho más rápido para algunas operaciones como son: la realización de consultas complejas, la carga del programa para lectura y escritura y el trabajo en ambientes multiusuario de gran tamaño.

2.1.7 – Medidas para mejorar el rendimiento en el acceso a los datos científicos almacenados en el PostgreSQL.

Para contrarrestar la sobrecarga impuesta por las funcionalidades del PostgreSQL, es bueno tomar medidas para mejorar el rendimiento en el acceso a los datos científicos almacenados. Algunas de estas optimizaciones se muestran a continuación:

 Uso de herramientas de mantenimiento como VACUUM, ANALYZE, REINDEX.  Uso de las cláusulas LIMIT y OFFSET en las consultas siempre que sea posible.  Optimizador de Consultas Genéticas.

 Rutinas de recobro de espacio en disco.  Prevención de fallos.

 Planificador Optimizador.  Generación de posibles planes.

2.2- Modelado de los datos científicos.

En este trabajo es de interés analizar algunas de las características de los tipos de datos que posee el PostgreSQL, en particular las facilidades para la definición de arreglos multidimensionales, tipos compuestos, datos espaciales y tipos abstractos para el acomodo de datos científicos.

Para los arreglos de una sola dimensión y multidimensionales puede emplearse una sintaxis alternativa ajustada al SQL estándar. Ambos podrían definirse de la siguiente manera:

Esta sintaxis requiere una constante entera para representar el tamaño del arreglo, sin embargo al igual que en el caso anterior PostgreSQL no restringe el tamaño del arreglo.

Además de los arreglos es posible definir tipos de datos compuestos. En esta sintaxis sólo se pueden especificar los nombres de los campos y los tipos; hasta el presente no pueden incluirse restricciones tales como NOT NULL. La palabra clave AS es esencial, pues sin ella el sistema “pensaría” bastante diferente acerca del significado del comando CREATE TYPE y pudieran obtenerse extraños errores de sintaxis.

Un dato espacial es una variable asociada a una localización del espacio. Normalmente se utilizan datos vectoriales, los cuales pueden ser expresados mediante tres tipos de objetos espaciales:

1. Puntos.

Se encuentran determinados por las coordenadas terrestres medidas por latitud y longitud. Por ejemplo: ciudades, accidentes geográficos puntuales, hitos.

2. Líneas.

Objetos abiertos que cubren una distancia dada y comunican varios puntos o nodos, aunque debido a la forma esférica de la tierra también se le consideran como arcos. Líneas telefónicas, carreteras y vías de trenes son ejemplos de líneas geográficas. 3. Polígonos.

Figuras planas conectadas por distintas líneas u objetos cerrados que cubren un área determinada, como por ejemplo países, regiones o lagos.

De esta forma la información sobre puntos, líneas y polígonos se almacena como una colección de coordenadas (x, y). La ubicación de una característica puntual, pueden describirse con un sólo punto (x, y). Las características lineales, pueden almacenarse como un conjunto de puntos de coordenadas (x, y). Las características poligonales, pueden almacenarse como un circuito cerrado de coordenadas.

Una vez definidos los tipos pueden usarse para crear tablas o funciones.

La abstracción es el mecanismo que permite seleccionar partes de un todo complejo para su consideración, ignorando el resto. Esto permite filtrar aquellos aspectos relevantes, y obtener soluciones más generales. El concepto de abstracción nos remite a la posibilidad de considerar la resolución de un problema sin tener en cuenta los detalles por debajo de cierto nivel.

El concepto de Tipo de Dato Abstracto (TDA en castellano o ADT en inglés) surgió para facilitar el trabajo con tipos de datos haciendo abstracción de la implementación de los mismos. Un TDA está dado por un grupo de datos que cumplen cierta condición especificada para él, más un conjunto de operaciones que representan su comportamiento.

En un SGBD-OR la variable dependiente puede almacenarse junto con sus dimensiones utilizando una columna que contenga un arreglo multidimensional, implementado como un ADT. Esto resulta una representación más natural, ya que la variable dependiente se almacena en la misma fila que las variables independientes o dimensiones.

PostgreSQL es un SGBD-OR que permite la definición de tipos de datos abstractos y también de las funciones que trabajarán sobre ellos. Tiene además un tipo predefinido de arreglo n- dimensional dinámico que se puede utilizar para modelar datos científicos. Este tipo de dato tiene algunas ventajas sobre tipos de datos similares de otros SGBD-OR (por ejemplo, Oracle) pues permite insertar, actualizar y eliminar elementos individuales, así como definir índices sobre estos.

En la Figura 18. Modelado abstracto de datos. se muestra la forma en que fue modelada la variable presión en PostgreSQL. Nótese que se creó un tipo abstracto de datos (PressureData) que encapsula los valores numéricos de la presión, y una descripción de los mismos. De la misma manera se pueden agregar otros atributos. Las otras variables fueron modeladas de forma similar.

Otra forma de almacenar los datos en un SGBD-OR, es utilizando el modelado multidimensional del esquema Estrella.

El esquema estrella deriva su nombre del hecho que su diagrama forma una estrella, con puntos radiales desde el centro. El centro de la estrella consiste de una tabla de hechos, que es aquella que contiene toda la información, y un conjunto de tablas dimensiones organizadas alrededor de ésta, conteniendo el catálogo de la información, formando las puntas de la estrella. Este modelo

entonces, resulta ser asimétrico, pues hay una tabla dominante en el centro con varias conexiones a las otras tablas. Las tablas de dimensiones tienen sólo una conexión a la tabla de hechos y ninguna más, vinculada por un identificador (Figura 19). Son relativamente pequeñas y se pueden utilizar como criterios de filtro. Son bases de datos históricas, más de consulta que de transacción, e incrementales.

Figura 19. Esquema Estrella.

El esquema de estrella sólo tiene un nivel. Su diseño es ad hoc y difícil de cambiar. La tabla de hechos es más grande en atributos y tuplas que las de dimensiones. El tener todos los hechos juntos y las dimensiones separadas permite que las “juntas” sean mínimas ocupando menos tiempo las consultas.

2.2- Importación de los Datos.

Para cargar una base de datos se utilizaría una herramienta para extraer la información de los archivos HDF donde están almacenados e ir acotejando estos datos dentro del SGBD-OR. Esta herramienta pudiera incluir sentencias SQL en código fuente C, lo que facilita mucho la realización de tareas comunes con bases de datos.

Datos científicos SGBD-OR

HERRAMIENTA

2.3- Accediendo a los DC en PostgreSQL.

Una vez que los datos científicos se encuentran almacenados dentro la base de datos, se pueden usar las operaciones tradicionales que brindan los SGBD-OR para manipularlos. Para este trabajo se eligieron cuatro de ellas para el cálculo de valores estadísticos de los datos: la suma, el promedio, el máximo y el mínimo.

Las bases de datos espaciales no tienen un conjunto de operadores que sirvan como elementos básicos para la evaluación de consultas ya que estas manejan un volumen extremadamente grande de objetos complejos no ordenados en una dimensión. Es por esto que existen algoritmos

complejos para evaluar predicados espaciales. Las consultas son realizadas generalmente en SSQL (Spatial SQL), el cual introduce mediante extensiones, los distintos conceptos del álgebra ROSE dentro del lenguaje SQL estándar, es decir, utiliza las cláusulas SELECT-FROM-WHERE para las tres operaciones en el álgebra relacional (proyección algebraica, producto cartesiano y selección). Las tres categorías fundamentales de consultas en un sistema de información espacial son:

1. Consultas exclusivamente de propiedades espaciales. Ej: "traer todos los pueblos que son cruzados por un río".

2. Consultas sobre propiedades no espaciales. Ej: "cuantas personas viven en Valdivia". 3. Consultas que combinan propiedades espaciales con no espaciales. Ej: "traer todos los

vecinos de un cuadra localizada en Los Angeles"

En el lenguaje SSQL, el ejemplo del segundo punto se escribiría de la siguiente forma:

SELECT poblacion FROM ciudades WHERE nombre= "Valdivia"

El PostgreSQL posee la capacidad de hacer transacciones anidadas (savepoints) y posee un sofisticado optimizador de consultas, que es capaz de resolver consultas complejas en tiempos comparables a los de los mejores DBMS. Una última adición en este campo es la habilidad de usar varios índices para resolver consultas sobre una misma tabla y mejorar el rendimiento de la base de datos. Estos índices pueden ser compuestos, únicos, parciales, funcionales (sobre funciones) y que pueden ser definidos como B-tree, R-tree, hash o GiST. PostgreSQL posee

Documento similar