SofiaDB
Base de datos SQL embebida, hecha en casa. Cada app recibe su propia base privada, las transacciones son serializables y lo confirmado sobrevive a un corte de luz.
Qué es
Un archivo y su diario
Páginas de 8 KiB con suma de verificación y un diario de escritura previa (WAL). Lo confirmado está en disco antes de responder.
Serializable con reintento
Varios escritores a la vez sobre instantáneas (MVCC). Si dos transacciones chocan, una gana y el bloque transaccion { } de la otra se repite solo.
Privada por app
Una app que declara permiso datos recibe una base que ninguna otra app puede abrir. Los valores viajan siempre como parámetros: la inyección SQL no compila.
Copias y cifrado
Copia en caliente sin detener a nadie, cifrado por página y rotación de claves desde la consola con sofia datos.
Cómo se usa
Una reserva que no admite dos citas a la misma hora: todo el bloque se confirma junto o no se confirma nada.
permiso datos
fn reservar(prof: texto, hora: entero) -> texto {
var r = "RESERVADA"
intentar {
transaccion {
let choca = datos.entero($"SELECT count(*) FROM cita WHERE profesional = {prof} AND inicio = {hora}")
si choca > 0 { fallar("HORA_OCUPADA") }
datos.ejecutar($"INSERT INTO cita (profesional, inicio) VALUES ({prof}, {hora})")
}
} si falla e {
r = e
}
devolver r
}
Lo medido
Pruebas de resistencia y bancos de rendimiento sobre archivos reales con fsync real.
en 20 cortes forzados
Sobre 78 963 confirmaciones, ninguna se perdió. Recuperación entre 5 y 35 ms.
disputas con un solo ganador
Sesiones que compiten por la misma fila: siempre gana una y solo una.
operaciones en 4 horas
Cero errores y memoria estable: +0,17 % por hora.
respaldo y restauración de 3,9 GB
15,3 millones de filas respaldadas en 46 s y restauradas en 63 s.
p99 de búsqueda por índice
En una tabla de 1 000 000 de filas, con los datos en caché.
confirmaciones con 8 sesiones
Con confirmación en grupo: varias transacciones comparten un mismo fsync.
copias en caliente sanas
Con 6 sesiones escribiendo durante las copias; el diario no crece.
Documentación
Motor
Formato en disco, garantías y errores con código estable.
Lenguaje
permiso datos, las funciones datos.*, transaccion { }, tipos y límites.
Tutorial
Gastos, talleres, copias y los errores típicos, paso a paso.
SQL
Referencia completa del SQL aceptado, sentencia por sentencia.
Consola
sofia datos: copias, claves, cifrado, personas y auditoría.
Acceso remoto
Consultas de solo lectura desde otro equipo y VisorDB.