- Lo he usado durante alrededor de 1 año y cambié a EdgeDB todos los proyectos en los que pude
- EdgeDB es una base de datos grafo/relacional construida sobre Postgres
→ Usa el motor existente tal cual, pero desde la perspectiva del usuario cambió todo. El mayor cambio está en el lenguaje de consultas y las herramientas (tooling)
Lenguaje de consultas
- EdgeDB no usa SQL, sino su propio lenguaje llamado EdgeQL, y eso cambia por completo el juego
- Después de usarlo una vez, ya no quiero volver nunca a SQL
→ Tipado potente, orientación a objetos, consultas profundas facilísimas, y mapea muy bien con la forma en que las personas piensan al consultar datos (porque la gente no piensa en términos de JOIN)
- Antes tampoco era fan de SQL, pero en la práctica no había reemplazo
- Tras aprender y practicar unos días con su fantástico tutorial estilo libro, me di cuenta de que modelar esquemas de base de datos puede ser algo divertido y ligero
→ La complejidad de SQL desapareció, y me hizo ver lo ineficiente y extraño que puede ser SQL como lenguaje de consultas
- EdgeQL es fácil de aprender, y con el quickstart y la vista general se puede captar como el 80%
- Me gusta tanto EdgeQL que me gustaría que se convirtiera en un estándar independiente. Por ejemplo, estaría buenísimo algo como EdgeDBLite que permitiera usar EdgeQL sobre una base de datos basada en archivos
Tooling
- Sigue el patrón moderno de poder ejecutar todo con un solo binario (como Go o Flutter)
→ Instalación y actualización del servidor, creación/eliminación de DB, REPL, migraciones, backups y gestión de proyectos, etc.
→ Y en la mayoría de los casos, "It Just Works"
- EdgeDB reinventó la forma de interactuar con una DB
→ Con el concepto de "Project" se conecta automáticamente a la DB y simplemente funciona, sin importar el DSN ni la configuración
→ Comparado con pasar más de 10 años buscando el comando SQL exacto para dar acceso root en localhost, es un alivio enorme
Funciones
- Modelado de relaciones many-to-many increíblemente fácil
- GraphQL embebido (se puede conectar directamente desde el frontend)
- Propiedades computadas
rating := math::mean(.ratings.score)
- backlinks: recorrer enlaces en sentido inverso
→ select User.<author; busca en la tabla enlazada al campo llamado author donde User está referenciado
uuid, collection, scalar, abstract y muchos otros tipos (mi favorito es cal::local_datetime)
- Cosas intimidantes como inheritance, constraints e introspection
Experiencia hasta ahora
- Lo uso desde hace alrededor de 1 año. Al principio migré un proyecto personal pequeño, y luego uno de los proyectos de la empresa
- La mayoría de mis trabajos son servicios prácticos de pequeña escala orientados a usuarios, así que a menudo pude darme el lujo de elegir la herramienta más adecuada mientras me encargaba yo solo
- Durante casi todo el tiempo con EdgeDB, la experiencia fue mayormente de "It Just Works"
- La mayoría de las cosas se encuentran fácilmente y tiene una documentación excelente, así que encontrar lo que necesitas es sencillo (de verdad, es uno de los mejores sitios de documentación que he visto)
Si es apto para producción
- Lo he estado usando "en producción" desde el otoño pasado
- Hay gente que le da más peso a eso de "usar en producción" que simplemente a "usarlo de verdad", pero...
- Cuando refactorizaron la herramienta de línea de comandos tuve que ajustar un poco los scripts de automatización, pero no fue gran cosa
- Mentalmente estaba preparado para pagar el costo del riesgo de ser early adopter, pero hasta ahora no hubo problemas
La expresividad de EdgeQL
- Me liberó de andar googleando cosas sobre SQL y buscando limitaciones de ORM y cómo esquivarlas
- EdgeQL me deja expresar exactamente lo que quiero obtener de la DB, y realmente se puede leer y entender (incluso por otros desarrolladores)
- A veces, gracias a EdgeQL, incluso se pueden evitar transacciones. Es posible hacer múltiples actualizaciones anidadas dentro de una sola consulta.
→ "Simplicity is complicated"
Migrations
- Una de las cosas más geniales es que la función de migraciones viene integrada
- Cambias el esquema y llamas a
edgedb migration create, se genera el archivo de migración,
y en el servidor basta con edgedb migration apply para aplicarlo de inmediato
- Como las migraciones están encadenadas por hashes, no pasa eso de aplicar una al azar y romperlo todo
- Al crear una nueva migración, el valor por defecto es interactivo, así que confirma todos los cambios desde la línea de comandos
Rendimiento
- Yo no manejo volúmenes enormes de datos, así que no necesito una DB de altísimo rendimiento
- Pero como usa Postgres por debajo, no representa un problema de rendimiento frente a otras DB
- EdgeDB en sí está escrito en Python (sería bueno si fuera Go, pero parece que los desarrolladores se sienten más cómodos con Python)
Librería cliente para Go
- Como yo uso Go, fue bueno contar con una librería nativa de Go para EdgeQL
- Hay librerías oficiales para Typescript/Javascript, Python y Go, y la comunidad da soporte para .Net y Elixir
Actualizaciones
- EdgeDB abstrae las complejidades de las versiones del servidor y sus actualizaciones
- El CLI de EdgeDB se encarga prácticamente de todo por defecto. Si hay una actualización nueva, la muestra y la actualiza.
→ Sospechosamente fluido
- Ahora mismo salió 2.0 RC, pero no me preocupa en absoluto. La experiencia hasta ahora me hace creer que será seguro y fácil
Comunicación y soporte
- Como early adopter, estoy muy satisfecho con la rapidez de las respuestas y la ayuda en los canales oficiales de EdgeDB
EdgeDB 2.0
- En la versión 2.0 que se lanza mañana se agregan buenas funciones
- EdgeDB UI: app web con editor visual de esquemas, REPL y más
- Group queries, variables globales de esquema, seguridad a nivel de objeto, Direct EdgeQL over HTTP, etc.
Lo que no me gusta o me preocupa
- La promesa de compatibilidad
- Hasta ahora todo bien. Actualizaciones menores que no rompen compatibilidad
- Me gustaría que hubiera un compromiso explícito con la compatibilidad
- El conjunto de funciones que sigue creciendo
- Ya tiene más funciones de las que yo necesito, y sigue creciendo
- Cuanto más potente se vuelve EdgeQL, más borrosa se hace la frontera entre la DB y el servidor, y uno empieza a preguntarse: "¿esto debería ir en el backend, o meterlo en un esquema de DB inteligente?"
- Usar un servidor HTTP embebido y empujar hacia reemplazar por completo el servidor backend en la mayoría de los proyectos parece razonable, pero... yo quiero una DB estable con este lenguaje de consultas y este motor tan buenos
- En fin, espero que EdgeDB se mantenga estable y consistente, sin crecer demasiado en funciones. Incluso con el set actual ya es excelente
Conclusión
- En mis próximos proyectos no pienso considerar RDB tradicionales
- Volver a SQL sería como pasar de Flutter a Ncurses, o de Go a lenguaje ensamblador
- Para mí, EdgeDB es el mayor avance en bases de datos de los últimos 20 años.
- Puede que eso cambie cuando acumule más experiencia, pero después de más de 1 año usándolo no hubo nada que arruinara esta alegría
- Cuanto más uso EdgeDB, más confío en él
- Me impresiona muchísimo todo lo que el equipo de EdgeDB ha hecho con EdgeDB mismo, el lenguaje, el sitio web, las herramientas y la comunidad
→ "Mad respect to the team"
- Y da la impresión de que apenas están calentando motores
10 comentarios
¡Gracias a esto conocí EdgeDB y lo estoy usando muy bien! ¡Muchas gracias~
Parece que va por un camino similar al de Prisma. Uso Prisma bastante bien, pero en términos de rendimiento hay varios puntos que me dejan con ganas de más; eso sí, los resultados del benchmark me llaman un poco la atención.
La sintaxis no es mucho de mi estilo... (también uso protobuf, y el código de ejemplo de conversión también está medio...)
¿Los demás suelen preferir este tipo de sintaxis, como la de GraphQL? Yo al final pienso que por detrás sigue siendo RDS, así que habrá una conversión en el medio; si eso no se muestra de forma clara, tiendo a desconfiar un poco...
Vi esta publicación y me interesó, así que he seguido estudiándolo.
Pero como todavía está en una etapa temprana, cuando me topo con algún bloqueo no aparecen muchos resultados al buscar.
Sí hay un canal de Discord, pero pensé que estaría bueno que los desarrolladores locales pudiéramos preguntar y responder con más comodidad, así que abrí una sala de chat abierta.
https://open.kakao.com/o/gtGY0Gve
Yo también lo anoté porque quiero probarlo.
Después de ver este artículo y completar todo el tutorial, me convence todavía más.
Interesante. Dice que no puede volver a un mundo sin SQL...
Me interesa.
¡Impresionante!
Dentro de la línea de graphdb, le había puesto el ojo a ArangoDB, pero creo que también voy a echarle un vistazo a EdgeDB.
Es un elogio enorme. Dicen que anunciarán la versión 2.0 el 28/7 a las 10 a. m. (PT).
Lanzamiento de EdgeDB 1.0
EdgeDB - ORDB open source de próxima generación para desarrolladores