Maqueta DCC PostgreSQL

LogoPostgreSQL

Autor:  Francisco Javier González Rivera

Breve descripción del post:
Mediante la elaboración de una maqueta del modelo de datos de la aplicación DCC (Diraya Clínico Centralizado) en el sistema de gestión de bases de datos PostgreSQL, se analizará el manejo y las características de PostreSQL, basándonos en la experiencia laboral sobre el sistema de gestión de bases de datos Oracle. La idea es evaluar PostgreSQL y la viabilidad de poder utilizarlo en pequeñas aplicaciones multiusuario de servicio online. En este post vamos a ver primero una breve introducción a PostgreSQL y después la maqueta desarrollada.

Documento con el trabajo completo
Scripts de la maqueta


¿Qué es PostgreSQL?

PostgreSQL es un sistema de gestión de bases de datos objeto-relacional, distribuido bajo licencia BSD y con su código fuente disponible libremente.  El proyecto PostgreSQL tal y como lo conocemos hoy en día empezó en 1996, aunque las bases y el trabajo en la que se asienta tienen sus comienzos en la década de los 70.  Hoy en día el grupo central (core team) de desarrolladores está formado por 6 personas, existen 38 desarrolladores principales y más 21 desarrolladores habituales. En total alrededor de 65 personas activas, contribuyendo con el desarrollo de PostgreSQL [2].  En [1] podéis encontrar más detalles sobre la historia de este proyecto.  La gráfica siguiente, muestra el número de líneas de código en cada versión y nos permite hacernos una idea de cómo ha ido creciendo el proyecto.

Número de líneas de código en cada versión de PostgreSQL

Número de líneas de código en cada versión de PostgreSQL [1]

Características

PostgreSQL utiliza un modelo cliente/servidor y usa multiprocesos en vez de multihilos para garantizar la estabilidad del sistema. Un fallo en uno de los procesos no afectará el resto y el sistema continuará funcionando.  A continuación tenéis un gráfico que ilustra de manera general los componentes más importantes en un sistema PostgreSQL.

Componentes en un sistema PostgreSQL

Componentes en un sistema PostgreSQL [1]

  • Aplicación cliente: Esta es la aplicación cliente que utiliza PostgreSQL como administrador de bases de datos. La conexión puede ocurrir via TCP/IP o sockets locales.
  • Demonio postmaster: Este es el proceso principal de PostgreSQL. Es el encargado de escuchar por un puerto/socket por conexiones entrantes de clientes. También es el encargado de crear los procesos hijos que se encargaran de autentificar estas peticiones, gestionar las consultas y mandar los resultados a las aplicaciones clientes.
  • Ficheros de configuración: Los 3 ficheros principales de configuración utilizados por PostgreSQL, postgresql.conf, pg_hba.conf y pg_ident.conf.
  • Procesos hijos postgres: Procesos hijos que se encargan de autentificar a los clientes, de gestionar las consultas y mandar los resultados a las aplicaciones clientes.
  • PostgreSQL share buffer cache: Memoria compartida usada por PostgreSQL para almacenar datos en caché.
  • Write-Ahead Log (WAL): Componente del sistema encargado de asegurar la integridad de los datos (recuperación de tipo REDO).
  • Kernel disk buffer cache: Caché de disco del sistema operativo.
  • Disco: Disco físico donde se almacenan los datos y toda la información necesaria para que PostgreSQL funcione.

La última serie de producción es la 9.3. Sus características técnicas la hacen una de las bases de datos más potentes y robustas del mercado. Su desarrollo comenzó hace más de 16 años, y durante este tiempo, estabilidad, potencia, robustez, facilidad de administración e implementación de estándares han sido las características que más se han tenido en cuenta durante su desarrollo. PostgreSQL funciona muy bien con grandes cantidades de datos y una alta concurrencia de usuarios accediendo a la vez al sistema. Podéis consultar la lista completa en inglés de características disponibles en las distintas versiones de PostgreSQL en [3]. A continuación tenéis un resumen de las características más importantes soportadas por PostgreSQL propuestas en [1]  agrupadas en tres categorías:

  1. Características Generales
    • Tablespaces.
    • Nested transactions (savepoints).
    • Two-phase commit.
    • Copias de seguridad en caliente (Online/hot backups).
    • Multi-Version Concurrency Control (MVCC).
    • Acceso encriptado vía SSL.
    • Licencia BSD.
    • Disponible para Linux y UNIX en todas sus variantes (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) y Windows 32/64bit.
  2. Características Programación/Desarrollo
    • Funciones/procedimientos almacenados (stored procedures) en numerosos lenguajes de programación, entre otros PL/pgSQL (similar al PL/SQL de Oracle), PL/Perl, PL/Python y PL/Tcl.
    • Bloques anónimos de código de procedimientos (sentencias DO).
    • Numerosos tipos de datos y posibilidad de definir nuevos tipos. Además de los tipos estándares en cualquier base de datos, tenemos disponibles, entre otros, tipos geométricos, de direcciones de red, de cadenas binarias, UUID, XML, matrices, etc.
    • Soporta el almacenamiento de objetos binarios grandes (gráficos, videos, sonido, …).
    • APIs para programar en C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, PHP, Lisp, Scheme, Qt y muchos otros.
  3. Características SQL
    • SQL92, SQL99, SQL2003, SQL2008.
    • Llaves primarias (primary keys) y foráneas (foreign keys).
    • Check, Unique y Not null constraints.
    • Columnas auto-incrementales.
    • Índices compuestos, únicos, parciales y funcionales en cualquiera de los métodos de almacenamiento disponibles, B-tree, R-tree, hash o GiST.
    • Sub-selects, consultas recursivas, Joins.
    • Vistas (views).
    • Disparadores (triggers) comunes, por columna, condicionales.
    • Herencia de tablas (Inheritance).

Maqueta DCC

Mediante la elaboración de una maqueta del modelo de datos de la aplicación DCC (Diraya Clínico Centralizado) en el sistema de gestión de bases de datos PostgreSQL, se analizará el manejo y las características de PostreSQL, basándonos en la experiencia laboral sobre el sistema de gestión de bases de datos Oracle. La idea es evaluar PostgreSQL y la viabilidad de poder utilizarlo en pequeñas aplicaciones multiusuario de servicio online. En este post vamos a ver primero una breve introducción a PostgreSQL y después evaluaremos la maqueta desarrollada. Los lenguajes de Programación/Tecnologías utilizados han sido SQL y  PL/pgSQL (similar al PL/SQL de Oracle).

La Maqueta DCC PostgreSQL ha incorporado para su evaluación los siguientes elementos de  desarrollo (el diseño y la implementación de la maqueta pueden consultarse en el documento con el trabajo completo y en el archivo con los scripts):

  • Tablas y tipos de datos principales (numéricos, cadenas, fechas, booleanos, campos de gran tamaño estilo LONG, CLOB de Oracle).
  • Claves Primarias, Claves Foráneas y Constraint (restricciones).
  • Índices.
  • Secuencias.
  • Disparadores (triggers).
  • Objetos PL/pgSQL: funciones, procedimientos y paquetes.
  • Sinónimos.
  • Vistas.
  • Enlaces de bases de datos.
  • Vistas Materializadas.
  • Replicación de Vistas Materializadas (completas e incrementales).
  • Usuarios.
  • Roles.
  • Jobs.
  • Contextos.

La maqueta ha permitido la implementación de todos estos elementos de PostgreSQL de forma satisfactoria, por lo que podemos considerar que PostgreSQL podría ser un sistema de bases de datos suficientemente potente como para desarrollar proyectos de pequeña y mediana complejidad de forma viable. No obstante, debido a su juventud, algunos aspectos avanzados se encuentran aun en fase experimental.

Referencias

[1] Sobre PostreSQL http://www.postgresql.org.es/sobre_postgresql [Ultima visita: Junio 2014] [2] PostreSQL: Contributor Profiles. http://www.postgresql.org/community/contributors/ [Ultima visita: Junio 2014] [3] PostreSQL: Feature Matrix. http://www.postgresql.org/about/featurematrix [Ultima visita: Junio 2014]

 

Más documentación sobre PostreSQL