En SQLite ya trabajan en un backend HCTree con soporte para escrituras paralelas
Los desarrolladores del proyecto SQLite han comenzado a probar un backend experimental de HCtree que admite el bloqueo a nivel de fila y proporciona un alto nivel de paralelismo en el procesamiento de consultas.
Sobre el nuevo backend en el que se encuentran trabajando se menciona que este tiene como objetivo mejorar la eficiencia del uso de SQLite en sistemas cliente-servidor que tienen que procesar una gran cantidad de solicitudes de escritura simultáneas en la base de datos.
Las estructuras b-tree utilizadas originalmente en SQLite para almacenar datos no están diseñadas para este tipo de carga, lo que limita a SQLite a escribir solo en una secuencia. Como experimento, los desarrolladores comenzaron a desarrollar una solución alternativa que utiliza estructuras de HCtree para el almacenamiento, más adecuadas para paralelizar operaciones de escritura.
El proyecto HC-tree (hctree) es un intento de desarrollar un nuevo backend de base de datos que mejora el SQLite normal de la siguiente manera:
Concurrencia mejorada: El uso de la extensión begin-concurrent cambia esto para que pueda ejecutarse simultáneamente utilizando el bloqueo optimista a nivel de página. Esto mejora un poco la simultaneidad, pero el bloqueo a nivel de página puede detectar conflictos entre transacciones lógicamente independientes, y las operaciones COMMIT aún deben serializarse.
Compatibilidad con la replicación: Stock SQLite admite la extensión de sesiones, que permite serializar el contenido de una transacción confirmada para su transmisión y aplicación a una segunda base de datos. Hctree integra esto en el backend de la base de datos y agrega soporte para la aplicación de dichas transacciones a las bases de datos de seguidores en configuraciones de líder-seguidor. En este caso, las transacciones recibidas de una base de datos líder se pueden aplicar más rápidamente y con mayor concurrencia que con las que se aplicaron originalmente a la base de datos líder, porque no se requiere validación de transacciones.
Eliminación de las limitaciones de tamaño de la base de datos: Stock SQLite utiliza números de página de 32 bits. Usando el tamaño de página predeterminado de 4 KiB, esto conduce a un tamaño máximo de base de datos de 2^44 bytes o 16 TiB.
Para manejar varias operaciones al mismo tiempo, los registros de HCtree usan un mecanismo de separación de transacciones que usa bloqueos a nivel de página, similar a MVCC (control de contención de múltiples versiones), pero usa controles de transacciones basados en rangos de claves y rangos de claves en lugar de conjuntos de páginas.
Las operaciones de lectura y escritura se realizan en relación con la instantánea de la base de datos, cuyos cambios se vuelven visibles en la base de datos principal solo después de que se completa la transacción.
Los clientes pueden utilizar tres operaciones de apertura de transacciones:
- «BEGIN«: las transacciones no tienen en cuenta los datos de acceso de otros clientes. Si se realizan operaciones de escritura dentro de una transacción, la transacción solo se puede confirmar si no hubo otras operaciones de escritura en la base de datos durante el tiempo de su ejecución.
«BEGIN CONCURRENT«: las transacciones recopilan información sobre el acceso de otros clientes. Si se realizan operaciones de escritura dentro de una transacción, la transacción se puede confirmar si se han confirmado otras transacciones en la base de datos desde que se creó la instantánea.
«BEGIN EXCLUSIVE«: después de abrir una transacción, bloquea las operaciones de otras transacciones hasta que se complete.
HCtree admite la replicación maestro-esclavo, lo que permite transferir transacciones a otra base de datos y mantener las bases de datos secundarias sincronizadas con la base de datos principal.
HCtree también elimina el límite de tamaño de la base de datos: en lugar de identificadores de página de datos de 32 bits, HCtree usa identificadores de 48 bits, lo que aumenta el tamaño máximo de la base de datos de 16 tebibytes a 1 exbibyte (millones de tebibytes).
Se espera que el rendimiento de SQLite con el backend HCtree sea al menos tan bueno como el backend clásico de un solo subproceso. Los clientes de SQLite con compatibilidad con HCtree podrán acceder tanto a las bases de datos de HC-tree como a las bases de datos SQLite heredadas.
Fuente: https://sqlite.org/