Base de datos de 5000 años: ¿Más fiable que las modernas?

2025-09-06

Una imagen de una base de datos sumeria de 5000 años de antigüedad provocó la reflexión del autor sobre el límite superior de almacenamiento de fechas en bases de datos. La imagen muestra una base de datos del 3100 a. C. que registra cuentas de malta y cebada, con una fiabilidad muy superior a la de las bases de datos modernas. Las pruebas revelaron que MySQL no puede almacenar fechas anteriores al 4713 a. C., mientras que PostgreSQL y SQLite sí pueden. Esto llevó al autor a plantearse cómo almacenar fechas aún más antiguas, como los registros de artefactos de museos, sugiriendo soluciones como el uso de marcas de tiempo de época o sistemas personalizados.

Leer más
(avi.im)
Desarrollo

¿Pueden las bases de datos reemplazar completamente las cachés?

2025-08-31

Esta publicación explora la posibilidad de que las bases de datos reemplacen completamente las cachés. Si bien las bases de datos ofrecen algunas capacidades de caché, como grupos de búfer y réplicas de lectura, las cachés sobresalen en el acceso a datos de baja latencia, especialmente para subconjuntos de datos específicos y datos precalculados. Para reemplazar las cachés, las bases de datos deben abordar varios desafíos: gestionar eficientemente numerosas réplicas de lectura, habilitar réplicas de lectura parciales, priorizar datos específicos e implementar un mecanismo eficiente de mantenimiento de vistas incrementales (IVM). El autor sugiere que la combinación de IVM con réplicas de lectura parciales podría eventualmente permitir que las bases de datos reemplacen parcialmente las cachés, pero aún existe una brecha.

Leer más
(avi.im)

Modo WAL de SQLite: Compensación entre durabilidad y rendimiento

2025-08-24

El modo WAL (Write-Ahead Log) de SQLite, a menudo utilizado para un mayor rendimiento de escritura, compromete la durabilidad de los datos en comparación con el modo de diario predeterminado. El pragma `synchronous` controla con qué frecuencia se llama a fsync; el valor predeterminado es NORMAL. En el modo NORMAL, los archivos WAL se sincronizan antes de cada punto de control y el archivo de base de datos después, pero la mayoría de las transacciones carecen de operaciones de sincronización. Para aplicaciones donde la durabilidad no es crítica, NORMAL es suficiente. Para una durabilidad garantizada ante una pérdida de energía, `synchronous=FULL` agrega una sincronización de archivo WAL después de cada confirmación de transacción, aumentando la durabilidad a costa de la velocidad de escritura. Esta explicación, motivada por preocupaciones sobre SurrealDB que posiblemente sacrifica la durabilidad para el rendimiento de referencia, aclara el enfoque de SQLite.

Leer más
(avi.im)

Problema de suma de comprobación en el modo WAL de SQLite: pérdida silenciosa de datos

2025-07-25

Esta publicación profundiza en un fallo en el mecanismo de suma de comprobación de SQLite en su modo de registro anticipado de escritura (WAL). Cuando se produce una discrepancia en la suma de comprobación en un frame WAL, SQLite descarta silenciosamente el frame defectuoso y todos los frames posteriores, incluso si no están corruptos. Este diseño, aunque intencional, conduce a una posible pérdida de datos. El autor analiza las razones subyacentes y propone que SQLite debería lanzar un error al detectar la corrupción en lugar de descartar silenciosamente los datos, mejorando así la integridad de los datos. La discusión también trata el contexto del uso de SQLite en sistemas integrados y dispositivos móviles, donde la corrupción es más frecuente.

Leer más
(avi.im)
Desarrollo

SQLite: Una Leyenda Increíble de Bases de Datos

2024-12-30

SQLite, la base de datos más ampliamente implementada del mundo, es mantenida por un equipo de tres personas, rechazando contribuciones externas, pero conquistando el mundo con su rendimiento excepcional y estabilidad. Nacida en un barco de guerra de EE. UU. para resolver problemas de tiempo de inactividad del servidor, se ha convertido en la piedra angular de billones de bases de datos. SQLite no es de código abierto, sino un software de dominio público, con menos restricciones que cualquier licencia de código abierto. Su riguroso proceso de prueba, incluso simulando situaciones extremas como fallos del sistema operativo, garantiza su fiabilidad increíblemente alta. Sin embargo, su modelo de negocio único —generando ingresos a través de soporte pago y membresías— también es digno de mención. La leyenda de SQLite reside no solo en su destreza técnica, sino también en la persistencia e innovación que la respaldan.

Leer más
(avi.im)
Desarrollo leyenda

Filtros de Bloom: El Secreto para Hacer SQLite 10 Veces Más Rápido

2024-12-22

Investigadores utilizaron filtros de Bloom de manera inteligente para hacer las consultas analíticas de SQLite 10 veces más rápidas. Descubrieron que las uniones de bucle anidado de SQLite eran ineficientes, con mucho tiempo dedicado a las sondas de árbol B. Al utilizar un filtro de Bloom antes de la operación de unión para filtrar rápidamente las filas que probablemente no coinciden y luego realizar sondas de árbol B solo en las coincidencias potenciales, se redujo significativamente el número de sondas. Los filtros de Bloom tienen una sobrecarga de memoria mínima y fueron fáciles de integrar en el motor de consulta existente de SQLite, lo que resultó en un aumento significativo del rendimiento. Esta mejora se ha integrado en SQLite v3.38.0.

Leer más
(avi.im)

Reescritura de SQLite en Rust logra una reducción de 100x en la latencia de cola

2024-12-16

Investigadores de la Universidad de Helsinki y Cambridge han reescrito SQLite en Rust, creando Limbo, un proyecto que aprovecha la E/S asincrónica y io_uring para mejorar drásticamente el rendimiento. Al utilizar E/S asincrónica y desagregación de almacenamiento, Limbo logra una reducción de hasta 100x en la latencia de cola, particularmente beneficioso en entornos serverless multiinquilino. La mejora principal proviene de reemplazar las instrucciones de bytecode sincrónicas por sus contrapartes asíncronas, eliminando bloqueos y mejorando la concurrencia. Las mejoras son más notables en los percentiles altos, lo que hace que Limbo sea ideal para aplicaciones que exigen alta fiabilidad.

Leer más
(avi.im)
Desarrollo E/S Asincrónica