Suscríbete para recibir notificaciones de nuevas publicaciones:

UPDATE Supercloud SET status = 'open alpha' WHERE product = 'D1';

2022-11-16

4 min de lectura
Esta publicación también está disponible en English, 日本語 y 简体中文.

En mayo, anunciamos nuestro empeño de simplificar las bases de datos: su creación, mantenimiento e integración. Nuestro objetivo es proporcionarte las herramientas necesarias para ejecutar sin problemas una base de datos potente, escalable y con un rendimiento insuperable. Y nos propusimos reinventar la experiencia de desarrollo de bases de datos para cualquier tipo de usuario, no solo para los expertos en bases de datos.

UPDATE Supercloud SET status = 'open alpha' WHERE product = 'D1';

Durante los últimos dos meses, hemos estado trabajando en ello, mientras aprendíamos importantes lecciones en el proceso. Resulta que desarrollar un producto de bases de datos relacionales sobre Workers lleva a la plataforma para desarrolladores al límite absoluto, y a menudo incluso lo supera. Esto nos parece totalmente sensacional. Significa que aunque nuestros avances puedan parecer lentos vistos desde fuera, cada mejora, arreglo de error o prueba de esfuerzo ayuda a trazar el camino para que todos nuestros clientes desarrollen las aplicaciones sin servidor más ambiciosas del mundo.

Sin embargo, no seríamos fieles a nuestro estilo si siguiéramos avanzando en la preparación de D1 para producción sin detenernos primero para conocer tu opinión, aunque D1 no esté realmente terminado aún. La Semana del desarrollador es el marco perfecto para presentar la versión alpha abierta de D1.

Una versión “alpha abierta” es un concepto nuevo para nosotros. Probablemente has oído el término "beta abierta" en distintos anuncios en Cloudflare, y aunque resulta adecuado para muchos de nuestros productos, no acababa de encajar para D1. Algunos componentes esenciales aún se encuentran en la fase de desarrollo y pruebas. Así, antes de que lancemos D1 en su forma completa como una versión beta pública para que lo empieces a utilizar para desarrollar tus aplicaciones en el mundo real, queremos asegurarnos de que todo el mundo puede empezar a hacerse una idea del producto en sus aplicaciones creadas como pasatiempo o sus proyectos secundarios.

¿Qué incluye la versión alpha?

Aunque aún se están realizando internamente muchos cambios en D1, hemos reflexionado mucho acerca de cómo tú, como desarrollador, interactúas con el producto, incluso si las bases de datos son algo nuevo para ti.

Utilización del panel de control de D1

En solo unos clics tendrás tu base de datos D1 funcionando, directamente desde tu panel de control.  En nuestra interfaz de D1, puedes crear, mantener y visualizar tu base de datos como desees. Los cambios realizados en la interfaz de usuario están disponibles al instante en Worker, sin necesidad de una nueva implementación.

Utiliza Wrangler

Si deseas ponerte manos a la obra, también puedes trabajar con tu base de datos utilizando nuestra CLI de Wrangler.  Crea tu base de datos y empieza a añadir tus datos manualmente o arráncala de una de estas dos formas:

1.  Ejecuta un archivo SQL

donde tu archivo.sql será similar a:

$ wrangler d1 execute my-database-name --file ./customers.sql

customers.sql

2. Crea y ejecuta migraciones

DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers (CustomerID INT, CompanyName TEXT, ContactName TEXT, PRIMARY KEY (`CustomerID`));
INSERT INTO Customers (CustomerID, CompanyName, ContactName) 
VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'),(4, 'Around the Horn', 'Thomas Hardy'),(11, 'Bs Beverages', 'Victoria Ashworth'),(13, 'Bs Beverages', 'Random Name');

Las migraciones son una forma de crear versiones de los cambios de tu base de datos. Con D1, puedes crear una migración y, a continuación, aplicarla a tu base de datos.

Para crear la migración, ejecuta:

Esto creará un archivo SQL en una carpeta migrations donde podrás añadir tus consultas. A continuación, aplica las migraciones a tu base de datos ejecutando:

wrangler d1 migrations create <my-database-name> <short description of migration>

Accede a D1 desde Worker

wrangler d1 migrations apply <my-database-name>

Puedes conectar D1 a Worker añadiendo el enlace a D1 en tu archivo de configuración wrangler.toml. A continuación, interactúa con D1 ejecutando las consultas desde Worker, de la forma siguiente:

O bien accede a D1 desde Pages Function

export default {
 async fetch(request, env) {
   const { pathname } = new URL(request.url);

   if (pathname === "/api/beverages") {
     const { results } = await env.DB.prepare(
       "SELECT * FROM Customers WHERE CompanyName = ?"
     )
       .bind("Bs Beverages")
       .all();
     return Response.json(results);
   }

   return new Response("Call /api/beverages to see Bs Beverages customers");
 },
};

En esta versión alpha, D1 también admite la integración con Cloudflare Pages. Puedes añadir un enlace a D1 en el panel de control de Pages y escribir tus consultas en Pages Function para crear una aplicación full-stack. Consulta toda la documentación para empezar a utilizar Pages y D1.

Herramientas creadas en la comunidad

Durante el periodo de nuestra versión alpha privada, el interés que despertó D1 entre los miembros de la comunidad generó valiosas contribuciones al ecosistema de D1 y a la experiencia de los desarrolladores. A continuación te mostramos algunos de nuestros proyectos favoritos hasta la fecha:

D1-ORM

Un mapeo objeto-relacional (ORM) te permite consultar y manipular datos utilizando JavaScript. Creado por un representante de la comunidad Discord de Cloudflare, el objetivo de d1-orm  es proporcionar una experiencia rigurosamente tipificada del uso de D1:

Puedes consultar toda la documentación y proporcionar tu opinión creando un tema en el repositorio de GitHub.

const users = new Model(
    // table name, primary keys, indexes etc
    tableDefinition,
    // column types, default values, nullable etc
    columnDefinitions
)

// TS helper for typed queries
type User = Infer<type of users>;

// ORM-style query builder
const user = await users.First({
    where: {
        id: 1,
    },
});

workers-qb

Se trata de un creador de consultas sin dependencias que proporciona una interfaz sencilla y estandarizada al mismo tiempo que mantiene las ventajas y la rapidez del uso de las consultas sin formato mediante un ORM tradicional. Aunque no está pensado para proporcionar una funcionalidad igual a ORM, workers-qb facilita la interacción con la base de datos desde el código para el acceso directo a SQL:

Puedes obtener más información sobre el creador de consultas aquí.

const qb = new D1QB(env.DB)

const fetched = await qb.fetchOne({
  tableName: 'employees',
  fields: 'count(*) as count',
  where: {
    conditions: 'department = ?1',
    params: ['HQ'],
  },
})

d1-console

En lugar de ejecutar el comando wrangler d1 execute en tu terminal cada vez que deseas interactuar con la base de datos, puedes interactuar con D1 desde d1-console. Creado por un representante de la comunidad Discord, ofrece la ventaja de ejecutar consultas de varias líneas, obtener el historial de comandos y mostrar el resultado en forma de tabla.

Aunque actualmente es un proyecto de la comunidad, tenemos previsto admitir de forma nativa una “Consola de D1” más adelante. Por ahora, empieza echando un vistazo al paquete d1-console en el siguiente enlace.

Adaptador de D1 para

Kysely es un creador de consultas SQL typescript con autocompletado y seguridad de tipos. Con este adaptador, puedes interactuar con D1 con la conocida interfaz de Kysely:

Echa un vistazo al proyecto aquí.

// Create Kysely instance with kysely-d1
const db = new Kysely<Database>({ 
  dialect: new D1Dialect({ database: env.DB })
});
    
// Read row from D1 table
const result = await db
  .selectFrom('kv')
  .selectAll()
  .where('key', '=', key)
  .executeTakeFirst();

¿Qué está aún en pruebas?

Los componentes más grandes que hemos desactivado para esta versión alpha son la réplica y la compatibilidad con las transacciones JavaScript. Mientras llevamos a cabo la implementación gradual de estos cambios, queremos destacar algunas limitaciones actuales en las que estamos trabajando activamente en las pruebas:

●      Ubicación de la base de datos: cada base de datos D1 ejecuta solo una única instancia. Se crea donde tú, como desarrollador, creas la base de datos, y no cambia de región en función de los patrones de acceso. Como resultado, la latencia para Workers en ejecución en cualquier otra parte del mundo será mayor.

●      Limitaciones de simultaneidad: en condiciones de mucha carga, es posible que las consultas de lectura y escritura se pongan en cola en lugar de activar la creación de nuevas réplicas. Como resultado, las características de rendimiento y ejecución de la versión alfa abierta no serán representativas del producto final.

●      Limitaciones de disponibilidad: cuando haya copias de seguridad en ejecución, estas bloquearán el acceso a la base de datos. En la mayoría de los casos, esto durará apenas uno o dos segundos, durante los que las solicitudes que lleguen se pondrán en cola.

También puedes consultar una lista más detallada y actualizada sobre las Limitaciones de la versión alpha de D1.

Solicitud de comentarios

Podemos hacer todo tipo de conjeturas y apuestas sobre para qué tipo de bases de datos deseas utilizar D1, pero nosotros no somos los usuarios, tú sí. Queremos que desarrolladores con experiencias diversas puedan acceder a una vista previa de la tecnología D1 en su fase inicial, y que nos digan dónde debemos realizar mejoras para que sea adecuado para tus aplicaciones de producción.

Para proporcionar comentarios generales sobre tu experiencia e interactuar con otros compañeros que tengan la versión alpha, únete a nuestro canal #d1-open-alpha en Discord para desarrolladores de Cloudflare. Tenemos previsto realizar los anuncios importantes y presentar las novedades en este canal así como en nuestras llamadas mensuales de la comunidad.

Para realizar solicitudes de funciones más específicas (no importa lo descabelladas que sean) y comunicar errores, crea un hilo aquí en el foro de la comunidad de Cloudflare, en la categoría de D1. Mantendremos este foro como un método de planificación de los próximos meses.

P.S. ¡Trabaja con nosotros!

¿Te interesa? Si te gusta resolver problemas indefinidos y desarrollar potentes productos a escala, ¡trabaja en el equipo de D1! Echa un vistazo a los puestos disponibles.

Protegemos redes corporativas completas, ayudamos a los clientes a desarrollar aplicaciones web de forma eficiente, aceleramos cualquier sitio o aplicación web, prevenimos contra los ataques DDoS, mantenemos a raya a los hackers, y podemos ayudarte en tu recorrido hacia la seguridad Zero Trust.

Visita 1.1.1.1 desde cualquier dispositivo para empezar a usar nuestra aplicación gratuita y beneficiarte de una navegación más rápida y segura.

Para saber más sobre nuestra misión para ayudar a mejorar Internet, empieza aquí. Si estás buscando un nuevo rumbo profesional, consulta nuestras ofertas de empleo.
Developer Week (ES)Cloudflare WorkersDatabase (ES)DesarrolladoresSupercloud (ES)D1 (ES)Developer Platform

Síguenos en X

Nevi Shah|@nevikashah
Glen Maddern|@glenmaddern
Sven Sauleau|@svensauleau
Cloudflare|@cloudflare

Publicaciones relacionadas

31 de octubre de 2024, 13:00

Moving Baselime from AWS to Cloudflare: simpler architecture, improved performance, over 80% lower cloud costs

Post-acquisition, we migrated Baselime from AWS to the Cloudflare Developer Platform and in the process, we improved query times, simplified data ingestion, and now handle far more events, all while cutting costs. Here’s how we built a modern, high-performing observability platform on Cloudflare’s network....