59 pontos por xguru 2022-07-27 | 10 comentários | Compartilhar no WhatsApp
  • Usei por cerca de 1 ano e converti para EdgeDB todos os projetos em que foi possível
  • EdgeDB é um banco de dados Graph/Relational construído sobre o Postgres
    → Ele manteve o engine existente como está, mas do ponto de vista do usuário tudo mudou. A maior mudança está na linguagem de consulta e nas ferramentas (tooling)

Linguagem de consulta

  • EdgeDB não tem SQL e usa sua própria linguagem, o EdgeQL, e isso é um divisor de águas
  • Depois de usar uma vez, não quero mais voltar para SQL
    → Tipagem forte, orientação a objetos, consultas profundas extremamente fáceis, e um mapeamento muito melhor para a forma como humanos pensam ao consultar dados (afinal, ninguém pensa em termos de JOIN)
  • Eu já não era fã de SQL antes, mas na prática não existia substituto
  • Depois de alguns dias aprendendo e praticando com um tutorial fantástico em estilo de livro, percebi que modelar schema de banco de dados pode ser algo divertido e leve
    → A complexidade do SQL desapareceu, e ficou claro para mim o quanto SQL é ineficiente e estranho como linguagem de consulta
  • EdgeQL é fácil de aprender, e só com o quickstart e a visão geral já dá para dominar uns 80%
  • Gostei tanto do EdgeQL que queria que ele virasse um padrão independente. Seria ótimo, por exemplo, existir algo como um EdgeDBLite que permitisse usar EdgeQL em bancos baseados em arquivo

Tooling

  • Segue o padrão moderno de fazer tudo com um único binário (como Go ou Flutter)
    → Instalação e atualização do servidor, criação/remoção de DB, REPL, migrações, backup e gerenciamento de projetos etc.
    → E, na maioria dos casos, "It Just Works"
  • O EdgeDB reinventou a forma de interagir com o banco de dados
    → Com o conceito de "Project", ele conecta automaticamente ao DB e simplesmente funciona, sem se importar com DSN ou configurações
    Comparado a passar mais de 10 anos procurando o comando SQL exato para conceder acesso root no localhost, isso é extremamente revigorante

Recursos

  • Modelagem de relações many-to-many absurdamente fácil
  • GraphQL embutido (com possibilidade de conexão direta pelo frontend)
  • Propriedades computadas rating := math::mean(.ratings.score)
  • backlinks: navegar links no sentido inverso
    select User.<author; busca em tabelas conectadas ao campo chamado author de User
  • uuid, collection, scalar, abstract e vários outros tipos (meu favorito é cal::local_datetime)
  • inheritance, constraints e coisas assustadoras como Introspection

Experiência até agora

  • Uso há cerca de 1 ano. No começo migrei um pequeno projeto pessoal e depois um dos projetos da empresa
  • A maior parte do meu trabalho são serviços pequenos e práticos voltados a usuários, então às vezes tive o luxo de tocar tudo sozinho e escolher a ferramenta mais adequada
  • Durante o tempo usando EdgeDB, quase tudo foi uma experiência de "It Just Works"
  • A maior parte das coisas é fácil de encontrar, e a documentação é excelente, então achar respostas também é fácil (de verdade, é um dos melhores sites de documentação que já vi)

Se serve para produção

  • Está "em produção" desde o outono passado
  • Algumas pessoas dão um significado maior a "estar em produção" do que simplesmente "estar sendo usado de verdade", mas...
  • Quando a ferramenta de linha de comando foi refatorada, precisei ajustar um pouco meus scripts de automação, mas nada sério
  • Mentalmente eu já estava preparado para pagar o preço dos riscos de ser early adopter, mas até agora não houve problemas

A expressividade do EdgeQL

  • Finalmente me livrei de ficar pesquisando coisas sobre SQL e maneiras de contornar limitações de ORM
  • EdgeQL consegue expressar exatamente o que eu quero buscar no DB, e dá para ler e entender de verdade (inclusive por outros desenvolvedores)
  • Às vezes o EdgeQL até permite evitar transações. Dá para fazer múltiplas atualizações aninhadas dentro de uma única consulta.
    → "Simplicity is complicated"

Migrations

  • Uma das coisas mais legais é que o recurso de migração já vem embutido
  • Você muda o schema e executa edgedb migration create, então um arquivo de migração é gerado,
    e no servidor basta rodar edgedb migration apply para aplicar imediatamente
  • Como as migrações são ligadas por hash, não existe o risco de aplicar uma aleatória e quebrar tudo
  • Ao criar uma nova migração, o padrão é ser interativo, então todas as mudanças são confirmadas pela linha de comando

Performance

  • Eu não trabalho com volumes gigantes de dados, então não preciso de um banco de altíssima performance
  • Mas, como ele usa Postgres por baixo, isso não vira um problema de desempenho em comparação com outros bancos
  • O próprio EdgeDB é escrito em Python (eu preferiria que fosse em Go, mas parece que os desenvolvedores estão mais acostumados com Python)

Biblioteca cliente para Go

  • Como eu uso Go, foi ótimo existir uma biblioteca nativa em Go para EdgeQL
  • Existem bibliotecas oficiais para Typescript/Javascript, Python e Go, e .Net e Elixir são suportados pela comunidade

Upgrade

  • O EdgeDB abstrai a complexidade de versão e atualização do servidor
  • O EdgeDB CLI cuida disso praticamente sozinho por padrão. Quando há atualização nova, ele mostra e faz o upgrade.
    → Suavidade até suspeita
  • Agora já saiu o 2.0 RC, mas isso não me preocupa nem um pouco. A experiência até aqui me faz acreditar que será seguro e fácil

Comunicação e suporte

  • Como early adopter, estou muito satisfeito com as respostas e a ajuda extremamente rápidas nos canais oficiais do EdgeDB

EdgeDB 2.0

  • A versão 2.0, lançada amanhã, adiciona bons recursos
    • EdgeDB UI: app web com editor visual de schema, REPL etc.
    • consultas em grupo, variáveis globais de schema, segurança em nível de objeto, Direct EdgeQL over HTTP etc.

O que eu não gosto ou me preocupa

  • Compromisso com compatibilidade
    • Até aqui tudo bem. Updates menores sem quebrar compatibilidade
    • Seria bom haver um compromisso explícito com compatibilidade
  • Conjunto de recursos crescendo
    • Já existe mais recurso do que eu queria, e continua aumentando
    • Quanto mais poderoso o EdgeQL fica, mais ele embaralha a fronteira entre banco e servidor, e aí surge a dúvida: "isso deve ir para o backend ou para um schema de banco mais inteligente?"
    • Parece fazer sentido empurrar na direção de substituir completamente o backend server na maioria dos projetos usando o servidor HTTP embutido, mas... eu só quero ter um banco estável com essa linguagem de consulta incrível e esse engine
  • Enfim, espero que o EdgeDB continue estável e consistente, sem crescer demais em recursos. O conjunto atual já é excelente

Conclusão

  • Não pretendo mais considerar RDBs tradicionais nos meus próximos projetos
  • Voltar para SQL seria como sair de Flutter para Ncurses, ou de Go para assembly
  • Para mim, EdgeDB é o maior avanço em bancos de dados dos últimos 20 anos
  • Talvez minha opinião mude quando eu tiver mais experiência, mas em mais de um ano de uso nada apareceu para estragar essa empolgação
  • Quanto mais uso, mais eu confio no EdgeDB
  • Fiquei muito impressionado com tudo que a equipe do EdgeDB fez no próprio EdgeDB, na linguagem, no site, nas ferramentas e na comunidade
    → "Mad respect to the team"
  • E parece que eles ainda estão só aquecendo

10 comentários

 
triumph1 2024-10-02

Graças a isso, conheci o EdgeDB e estou usando muito bem! Obrigado~

 
extremer 2022-08-27

Parece que está seguindo um caminho parecido com o do Prisma. Eu uso Prisma com gosto, mas há muitos pontos decepcionantes em termos de performance, então os resultados do benchmark até me chamaram um pouco a atenção, viu?
A sintaxe não faz muito o meu estilo, mas... (também uso protobuf, e até o código de exemplo de conversão é meio...)

Vocês preferem esse tipo de sintaxe parecida com GraphQL? No fim, para mim o backend continua sendo RDS, então vai ter uma conversão no meio de qualquer jeito, e quando isso não fica claramente exposto eu tendo a ficar meio receoso...

 
dextto 2022-08-14

Depois de ver esta postagem, fiquei interessado e continuo estudando.
Mas, talvez por ainda estar no começo, quando surge alguma dificuldade não aparecem muitos resultados nas buscas.
Existe um canal no Discord, mas achei que seria bom ter um espaço para desenvolvedores locais fazerem perguntas e responderem com mais tranquilidade, então criei uma sala de chat aberta.
https://open.kakao.com/o/gtGY0Gve

 
forteleaf 2022-07-29

Eu também anotei porque queria experimentar.

 
ryuheechul 2022-07-28

Depois de ler este texto e concluir todo o tutorial, fiquei ainda mais convencido.

 
yunyun0505 2022-07-28

Interessante. Então não dá para voltar a um mundo sem SQL..

 
jujumilk3 2022-07-27

Achei interessante.

 
nicewook 2022-07-27

Impressionante!

 
bbulbum 2022-07-27

Entre os bancos do tipo graphdb, eu estava de olho no ArangoDB, mas acho que também vou dar uma olhada no EdgeDB.

 
xguru 2022-07-27

É um elogio e tanto. Dizem que vão anunciar a versão 2.0 em 28/7 às 10h da manhã (PT).

Lançamento do EdgeDB 1.0
EdgeDB - ORDB open source de nova geração para desenvolvedores