Hace poco se dio a conocer la noticia de la publicación de un nuevo motor de almacenamiento para PostgreSQL llamado «OrioleDB«, el cual fue creado por OrioleData.
El objetivo de OrioleDB es proporcionar un almacenamiento rápido y compacto que no provoque una sobrecarga de los archivos de la base de datos con el tiempo y que no requiera el uso de un proceso VACUUM que se ejecuta periódicamente para la recolección de elementos no utilizados.
Esto lo logra mediante la implementación de registros de deshacer a nivel de fila y de bloque, así como la fusión automática de páginas. Los registros de deshacer en el nivel de fila y bloque proporcionan un nivel de control más granular, lo que permite un manejo más eficiente de los cambios de datos. La función de fusión automática de páginas funciona incansablemente en segundo plano para consolidar los datos fragmentados, lo que mejora aún más la eficiencia del sistema.
Sobre OrioleDB
Como ya mencionamos, OrioleDB es un motor nuevo para PostgreSQL, desarrollado con un objetivo principal: evitar que las tablas se sobrecarguen y eliminar la necesidad de un mantenimiento regular como VACUUM.
Las estructuras utilizadas en OrioleDB permiten procesar de manera más eficiente las operaciones de modificación de datos en la base de datos y reemplazar los bloques liberados sin acumularlos en el tiempo. La capacidad de prescindir de VACUUM se implementa gracias al uso de rollback logs (undo logs) que funcionan a nivel de bloques y líneas individuales, así como un sistema para fusionar automáticamente las páginas de datos.
El registro de reversión a nivel de fila permite realizar actualizaciones con el reemplazo de datos en el lugar, sin liberar el registro actual y crear uno nuevo. El registro de reversión a nivel de bloque permite adelantarse a las tuplas y liberar espacio de almacenamiento inmediatamente después de una operación DELETE, a pesar de que permanecen visibles en las transacciones fallidas. Para reducir la fragmentación del almacenamiento que resulta de una gran cantidad de eliminaciones, las páginas de datos individuales se fusionan automáticamente en segundo plano.
El registro de transacciones WAL en OrioleDB se mantiene en el nivel de fila, no en bloques, lo que facilita su uso en sistemas distribuidos y permite paralelizar la puesta en marcha del registro. Es posible crear configuraciones distribuidas con varios servidores maestros activos, para mantenerlos en estado sincronizado se utiliza el algoritmo de consenso Raft.
De las características que se destacan de OrioleDB, se puede observar la lectura de páginas de datos sin usar bloqueos, la vinculación directa de páginas en RAM con páginas en almacenamiento permanente, el uso del mecanismo CoW (copia en escritura) al fijar puntos de control para crear instantáneas consistentes en cualquier momento. Los valores de 64 bits se utilizan para los identificadores de transacciones, cuyo uso resuelve el problema de los desbordamientos del contador.
El uso de OrioleDB permite no solo eliminar la necesidad de operaciones manuales y simplificar el mantenimiento del DBMS, sino también aumentar el rendimiento. Por ejemplo, se logra un mejor rendimiento al actualizar los datos en el lugar, lo que evita cambiar los índices que no están relacionados con el almacenamiento del valor modificado. El motor también admite el almacenamiento de datos en forma comprimida (la compresión se realiza mediante el algoritmo ZSTD y se implementa a nivel de bloques de tamaño variable), lo que le permite reducir el tamaño de la base de datos en el disco entre 4 y 5 veces.
La prueba de una configuración de una sola tabla con 5 índices usando OrioleDB mostró un aumento de 5x en TPS (transacciones procesadas por segundo), una reducción de 2.3x en la carga de la CPU, una reducción de 22x en las operaciones de E/S por transacción.
Finalmente si estás interesado en poder conocer más al respecto, debes saber que el motor está escrito en C y se distribuye bajo una licencia de PostgreSQL y se implementa como un complemento que requiere cambios en el código base central de PostgreSQL.
Cabe mencionar que en su forma actual, el motor se encuentra en la etapa de prueba beta y aún no se recomienda para implementaciones de producción.
Puedes consultar los detalles de la publicación original en el siguiente enlace.