PostgreSQL – La historia
Comienzos humildes – Un proyecto de investigación
PostgreSQL (o Postgres) nació en el año 1986 como POSTGRES, un proyecto de investigación de la Universidad de Berkeley en California, dirigido por Michael Stonebraker, un influyente investigador en bases de datos. Al diseñar POSTGRES, el equipo de Stonebraker procuró mejorar INGRES, un anterior proyecto prototipo dirigido por el mismo investigador. Lo hizo principalmente mediante el soporte de tipos de datos definidos por el usuario (o «dominios»), con reglas arbitrarias complejas y otros conceptos objeto-relacionales.
El equipo de Stonebraker desarrolló activamente POSTGRES durante ocho años, añadiendo características que incluyen reglas, procedimientos y tipos extensivos con índices. POSTGRES que se comercializó más tarde como Illustra, fue luego adquirido por Informix e integrado en su Universal Server. En el año 2001, IBM adquirió Informix a un costo de 1.000 millones de dólares.
POSTGRES usaba su propio lenguaje de consulta, POSTQUEL. Aunque teóricamente superior al dominante SQL, gracias a una mayor profundidad de expresión debido a sus fundamentos teóricos más avanzados, en la práctica POSTQUEL no se ajustaba a las necesidades de la industria, que ya se había estandarizado con SQL. Por esa razón, en el año 1995 dos estudiantes del laboratorio de Stonebraker, Andrew Yu y Jolly Chen, reemplazaron POSTQUEL con un subconjunto ampliado de SQL. POSTGRES fue rebautizado como Postgres95.
Nace una comunidad
En el año 1996, el proyecto despertó gran interés fuera del ámbito académico. Quedó claro que el nombre Postgres95 con el tiempo habría sonado anticuado, así que el proyecto fue rebautizado como PostgreSQL. Luego, nació el Grupo Global de Desarrollo de PostgreSQL. Esta afiliación internacional de desarrolladores de bases de datos, que trabajan principalmente en la industria informática, asumió el control del código base de PostgreSQL. PostgreSQL empezó con la versión 6 (siguiendo la secuencia de versiones establecidas en Berkeley) como tributo al equipo de Stonebraker por su significativa contribución.
PostgreSQL 6
Durante la etapa inicial de desarrollo de la versión 6, se elaboraron muchas de las características que definen PostgreSQL. Entre ellas:
- Control de la Concurrencia Multi Versión. El bloqueo a nivel de tabla fue reemplazado por el MVCC, un sofisticado sistema en el cual la lectura nunca bloquea la escritura y la escritura nunca bloquea la lectura. MVCC recibió su popularidad gracias a Oracle, a principios de los años ochenta. Su empleo en PostgreSQL favoreció la adopción de la técnica en muchos otros sistemas de bases de datos.
- Se introdujeron importantes mejoras a la velocidad. Aunque el proyecto siempre ha priorizado la integridad y confiabilidad de los datos, se logró un aumento significativo en el rendimiento.
- Mejoras en los tipos de datos integrados, incluyendo sofisticados tipos de fecha/hora y soporte para tipos geométricos avanzados.
PostgreSQL 7
La época de la versión 7 se extendió por unos 4 años. Durante ese periodo se produjeron 5 versiones mayores (7.0 – 7.4) y se alcanzaron otros importantes hitos. Estos incluyeron:
- Lo más notable es una implementación inicial de WAL (registros de escritura previa). Se trata de un conjunto de técnicas que proporcionan atomicidad y durabilidad a los sistemas de bases de datos. Los segmentos de WAL se registran en un disco que describe todos los cambios en la base de datos, antes de que estos se hagan efectivos.
- Sentencias OUTER JOIN.
- TOAST, una técnica de almacenamiento de datos de gran tamaño, comprimidos y fuera de línea. De esta manera, una tabla de base de datos, por ejemplo, logra almacenar eficientemente grandes porciones de texto.
- Varios lenguajes de procedimientos, incluyendo PL/PGSQL, basados en PL/SQL de Oracle
PostgreSQL 8
La versión 7 se caracterizó por sus mejoras en cuanto a usabilidad y características avanzadas de desarrollo. Bajo muchos aspectos, superó a todos los proveedores de bases de datos comerciales. Sin embargo, fue la línea 8 (2004-2009) la que introdujo características supuestamente exclusivas de dos o tres megacorporaciones. WAL – el registro de escritura previa – formaba parte integral de muchas de estas características, especialmente la agrupación y la alta disponibilidad. Ha sido y sigue siendo el enfoque de las contribuciones de 2ndQuadrant a PostgreSQL. La línea 8 se destaca también por marcar la fundación de 2ndQuadrant que, desde el principio y a partir de la versión 8.0, se involucró considerablemente en el proceso de desarrollo de PostgreSQL.
Inicialmente, la versión 8.0 introdujo una característica importante: Puntos de retorno, o subtransacciones, mediante los cuales una parte atómica (es decir, una transacción) puede subdividirse en partes más pequeñas capaces de abortar individualmente de forma atómica, sin abortar necesariamente toda la transacción. Los puntos de retorno pueden incluso ser colocados arbitrariamente. Tal vez una característica aún más importante que se introdujo en esa versión fue la recuperación Point-in-Time, que hace posible realizar respaldos continuos del servidor, o recuperar algún punto en el tiempo previo a un error. También trajo la tan esperada versión nativa para Windows.
La versión 8.1 (2005) introdujo otra característica de clase empresarial desarrollada por 2ndQuadrant: particionamiento de tablas mediante el uso de «exclusión de restricciones». Esta función permite eludir el escaneo de tablas ‘hijas’ derivadas de una tabla ‘madre’ (en una jerarquía de clases) cuando se determina que dicho análisis no devolverá registros para la consulta en cuestión.
La versión 8.2 en el año 2006 consolidó los logros de las dos versiones anteriores. Contaba con instrumentos mejorados de la información de WAL y varias características de recuperación tras bloqueo. Se destacó también por ser la versión empleada por Greenplum en la creación de su base de datos patentada, destinada al mercado del almacenamiento de datos. 4 años más tarde, EMC adquirió Greenplum y su homónima solución de almacenamiento de datos. Aunque no se divulgó el valor efectivo de la adquisición, Greenplum, al parecer, había recaudado unos 61 millones de dólares de financiación antes de ser absorbida. Sobre esa base, la prensa especializada estimó independientemente el valor del acuerdo entre 100 y 150 millones de dólares.
La versión 8.3 del año 2008 marcó un hito en el rendimiento. Presentó una serie de características importantes, que incluyeron:
- HOT (Heap-only Tuples), una optimización que permite reutilizar las tuplas muertas a través de INSERT o UPDATE y no sólo mediante el proceso habitual de VACUUM, siempre que no ocurran cambios en las columnas indexadas. Esta optimización mejora considerablemente el rendimiento y lo hace más consistente.
- Commit asíncrono. Característica introducida por Simon Riggs, CTO de 2ndQuadrant. Permite que las transacciones realicen un commit asíncrono por razones de rendimiento. Puede ser empleado por las aplicaciones, donde esto sea conveniente.
- Reescritura del escritor de segundo plano. Introducida por Gregory Smith consultor principal de PostgreSQL en los Estados Unidos y experto en rendimiento de Postgres. Introduce una nueva estrategia JIT (“justo a tiempo») que mejora considerablemente la eficiencia de la escritura en el disco.
- Mejora, introducida por 2ndQuadrant, en la estrategia de desalojo de la memoria caché. Impide que los grandes escaneos secuenciales remuevan innecesariamente del caché del buffer páginas usadas frecuentemente.
- Módulo pg_standby, escrito por 2ndQuadrant, permite una fácil administración de los servidores en espera semiactiva.
La versión 8.4, la final de la línea 8, fue publicada en el año 2009. Aportó nuevas mejoras en la usabilidad, características enfocadas en el desarrollo y rendimiento. Entre ellas:
- Funciones SQL más avanzadas, como las Funciones Ventana y las Expresiones Comunes de Tabla. Anteriormente, estas características sólo estaban disponibles en un pequeño número de sistemas de bases de datos comerciales.
- Restauración paralela: Restaurar la base de datos desde un respaldo lógico en paralelo.
- Mapa de visibilidad. Reduce considerablemente la sobrecarga de vacuum en las tablas que no cambian frecuentemente.
- Mapa del espacio libre en el disco. Simplifica la administración del espacio disponible al punto que el usuario final no tiene que considerarlo.
PostgreSQL 9
La línea 9 representó un punto de inflexión para la comunidad PostgreSQL, por varias razones. La más conocida por los usuarios, es la introducción del flujo de replicación binaria, sencillo y listo para ser utilizado. Fue principalmente el trabajo de 2ndQuadrant que hizo posible esta nueva característica. Se trataba de un complemento lógico a su anterior proyecto relacionado con WAL. De manera específica, la introducción de parte de Simon Riggs, CTO de 2ndQuadrant, de la técnica Hot Standby.
Una razón adicional es que con la línea 9 PostgreSQL dejó de ser utilizado como simple término de comparación con los sistemas de gestión de base de datos comerciales. Pasó a estar en la vanguardia, superando a todos sus competidores en varias áreas importantes. Quizás lo más destacado es que la introducción, de parte de 2ndQuadrant, de la replicación síncrona en PostgreSQL 9.1 ofrece algo de inmenso valor: la replicación sin pérdida de datos. Gracias a esta novedad mundial, los usuarios pueden incluso controlar la durabilidad de cada transacción, y todos los niveles de durabilidad pueden coexistir en una sola aplicación.
La línea 9 introdujo también una serie de novedades, a nivel global, que no están directamente relacionadas con WAL. Entre ellas figura la innovadora técnica Serializable Snapshot Isolation, basada en un reciente y reconocido documento académico. Gracias a esta característica es posible obtener la auténtica serializabilidad que ofrece el bloqueo de predicados, sin provocar bloqueos adicionales en las transacciones. Además, incluye limitaciones de exclusión cuyo empleo es similar a una restricción UNIQUE pero sin el uso de pesados bloqueos explícitos que apagan el rendimiento.
Esto permite resolver «el problema de la doble reserva» evitando la doble contratación de una sala de conferencias con sesiones superpuestas en la misma sala. Otro ejemplo de novedad mundial, disponible a partir de PostgreSQL 9.1, es la escritura de expresiones de tabla comunes, introducidas por el consultor Marko Tiikkaja de 2ndQuadrant. Esta extensión no estándar a las expresiones de tabla comunes del estándar SQL permite a las cláusulas WITH contener subconsultas que no sean únicamente SELECT, sino también INSERT, UPDATE y DELETE. Esto favorece varios patrones útiles, como transferir con facilidad los datos (realizando un DELETE en una tabla y un INSERT en otra) dentro de una misma consulta o instantánea.
Hay más …
Haga clic aquí para conocer más sobre las increíbles características que 2ndQuadrant sigue aportando a todas las versiones principales de PostgreSQL.