Persistir datos en el edge ya no requiere levantar servidores de bases de datos ni gestionar credenciales complejas. Cloudflare ofrece D1, un motor construido sobre SQLite que se integra de forma nativa con Workers y permite tener una base de datos SQL completamente administrada, con réplicas globales, time travel y sin configuración de usuarios ni contraseñas.
¿Qué es D1 y cómo se conecta con Workers?
Dentro del ecosistema de storage de Cloudflare encontramos varias opciones: D1 para bases de datos SQL, KV para almacenamiento clave-valor y R2 para objetos. D1 destaca porque simula una base de datos relacional completa usando el engine de SQLite [0:06].
La conexión entre un worker y D1 se realiza mediante bindings, que son identificadores internos de la cuenta de Cloudflare. Estos IDs son privados pero no sensibles: alguien con acceso a ellos no puede hacer nada porque pertenecen a otra organización [5:57]. Esto elimina la necesidad de manejar cadenas de conexión con usuario, contraseña y roles, ya que todo es autoadministrado.
En el archivo wrangler.toml se configuran tres elementos clave:
- El binding (en este caso
DB), que es el nombre con el que el worker accede a la base de datos.
- El nombre de la base de datos (
WaitlyDB).
- La carpeta de migraciones y el ID de la base de datos.
¿Qué límites tiene D1 en la capa gratuita?
Antes de construir cualquier solución, es fundamental conocer los límites del servicio [2:18]. En la capa gratuita se pueden crear hasta 10 bases de datos (50 000 en la capa paga) y el tamaño máximo por base es de 500 MB (10 GB en planes pagos). Para almacenar texto simple, 500 MB alcanza para una cantidad considerable de registros.
El límite de 10 GB es un valor fijo que no se puede aumentar [3:02]. Si la base de datos crece mucho, se pueden aplicar estrategias como dividir la información en múltiples bases de datos, algo que los bancos tradicionales hacen al no concentrar toda la información de clientes en una sola tabla.
¿Cómo funciona el time travel y la recuperación de datos?
D1 incluye capacidades de recovery integradas [3:38]. Las cuentas pagas tienen hasta 30 días de restauración y las gratuitas hasta siete días. Si alguien ejecuta una migración equivocada, es posible regresar a un punto anterior en el tiempo sin configuración adicional. También se pueden importar y exportar datos, útil para descargar backups de producción, ya sean completos o anonimizados.
¿Qué es el data location y la read replication?
Cuando se ejecuta algo en Cloudflare, corre en su región global [4:38]. Sin embargo, siempre existe un data center principal donde se aloja el máster de la base de datos. Esto se puede configurar por temas de jurisdicción de datos o normativas empresariales, eligiendo entre regiones como Norteamérica o Europa.
La read replication permite tener réplicas de lectura distribuidas globalmente [7:48]. Lograr esto con un Postgres tradicional replicado en Australia, España y Sudamérica simultáneamente implica complejidad y costo elevado. Cloudflare simplifica esta arquitectura, aunque requiere preparar el código para manejar consistencia eventual.
¿Cómo se prueba D1 en desarrollo local?
Al agregar un nuevo binding, es necesario regenerar los tipos ejecutando el comando correspondiente para evitar errores [9:28]. Con el backend y frontend corriendo localmente, se puede probar el flujo completo.
Al registrar un correo con un POST, la respuesta esperada es un código 201 [10:16], que es el estatus adecuado para creación de recursos. El campo country aparece vacío en local porque Workerd no tiene acceso a esa información; solo se obtiene en el runtime real de Cloudflare Workers.
Al intentar registrar el mismo correo nuevamente, la base de datos detecta que se rompe un constraint de unicidad y el código devuelve un error 409 con el mensaje correspondiente [10:42]. Esto se maneja verificando si la excepción contiene una violación de unicidad.
Las queries se preparan usando el método .prepare() con .bind() para interpolar variables de forma segura, lo que previene SQL injections [11:08]. Esta es una implementación a bajo nivel; para producción se recomienda utilizar un ORM que agregue una capa de abstracción y seguridad adicional.
Si te interesa profundizar en índices, modelado de datos o patrones de optimización para D1, comparte en los comentarios qué límites o temas te gustaría explorar con más detalle.