Quando pensamos em bases de dados, a divisão é quase sempre binária: SQL ou NoSQL, relacionais ou documentais, grafos ou colunares. A JetBrains — conhecida pelo IntelliJ IDEA, PyCharm e YouTrack — decidiu que não tinha de ser assim tão preto no branco e criou o YouTrackDB: uma base de dados object-oriented que corre em grafos, com query language SQL-like, isolamento snapshot por omissão e suporte nativo a TinkerPop.
O projeto nasceu das necessidades internas da JetBrains, que usa o YouTrackDB em produção para alimentar o YouTrack (o seu tracker de issues) e outras ferramentas da casa. Em Abril de 2025 abriram o código sob licença Apache 2.0, e desde então a base de código — escrita em Java — tem evoluído rapidamente, com versões snapshot disponíveis no Maven Central e uma comunidade ativa no Zulip.
Vou explicar o que é, como funciona o YQL (YouTrackDB Query Language) e porque é que elimina JOINs, o modelo de dados com herança e polimorfismo, isolamento snapshot, segurança baseada em predicados, e como começar em modo embedded com Java 21+.
O que distingue o YouTrackDB?
A maioria das bases de dados grafos pede-te para esqueceres o que sabes de SQL e aprenderes uma linguagem de query completamente diferente (Cypher, SPARQL, Gremlin puro). O YouTrackDB segue outro caminho: usa YQL, uma linguagem baseada em SQL que estende o familiar SELECT ... WHERE ... com navegação por pontos para seguir ligações entre registos.
-- Numa BD relacional, para obter employees de Itália:
-- SELECT * FROM Employee A, City B, Country C
-- WHERE A.city = B.id AND B.country = C.id AND C.name = 'Italy'
-- Em YQL, a mesma query:
SELECT FROM Employee WHERE city.country.name = 'Italy'
Isto parece simples — e é essa a ideia. O motor de query usa índices automaticamente sempre que existem, e a navegação por ligações tem complexidade O(1), não havendo JOINs em runtime para pagar.
Modos de schema
Ao contrário de bases de dados relacionais tradicionais, o YouTrackDB permite três modos de trabalho:
- Schema-less: sem definição prévia de tipos, ideal para prototipagem
- Schema-mixed: algumas constraints definidas, o resto livre
- Schema-full: tudo validado ao nível da base de dados, como numa BD relacional
Isto faz com que o YouTrackDB seja útil tanto para um MVP onde ainda não sabes o schema final como para um sistema de produção com mil regras de integridade.
Modelo orientado a objetos com herança
A característica mais distintiva do YouTrackDB é o modelo de dados orientado a objetos implementado ao nível da base de dados. Classes formam hierarquias, subclasses herdam propriedades, e queries polimórficas funcionam de forma nativa.
CREATE CLASS Vehicle EXTENDS V ABSTRACT
CREATE PROPERTY Vehicle.make STRING
CREATE PROPERTY Vehicle.model STRING
CREATE CLASS Car EXTENDS Vehicle
CREATE PROPERTY Car.doors INTEGER
CREATE CLASS Truck EXTENDS Vehicle
CREATE PROPERTY Truck.payloadTons DOUBLE
-- Query polimórfica: devolve Carros e Trucks
SELECT make, model FROM Vehicle
É possível ter herança múltipla — uma classe pode extender várias superclasses e herdar propriedades de todas elas. Isto é algo que nenhuma base de dados relacional tradicional te dá sem hackear com views ou herança de tabelas (e mesmo assim, mal).
Ligação entre registos: LINKS e Edges
No YouTrackDB, as relações são representadas por LINKS (ponteiros diretos entre registos) e por Edges (arestas nomeadas com propriedades próprias, para relações mais ricas). A navegação entre registos é feita com a notação de ponto, sem necessidade de materializar JOINs.
CREATE CLASS Person EXTENDS V
CREATE PROPERTY Person.name STRING
CREATE CLASS Movie EXTENDS V
CREATE PROPERTY Movie.title STRING
CREATE CLASS ActedIn EXTENDS E
CREATE PROPERTY ActedIn.role STRING
-- Inserir relações com YQL
CREATE EDGE ActedIn FROM (SELECT FROM Person WHERE name='Keanu') TO (SELECT FROM Movie WHERE title='The Matrix') SET role = 'Neo'
-- Query: filmes onde o Keanu atuou
SELECT title, role FROM (
SELECT expand(out('ActedIn')) FROM Person WHERE name = 'Keanu'
)
Para padrões de grafo mais complexos, existe o MATCH statement — uma forma declarativa de percorrer o grafo com suporte para profundidade máxima, condições opcionais e path aliasing.
Snapshot isolation e controlo de concorrência
O YouTrackDB usa isolamento snapshot por omissão — cada transação vê uma fotografia estável da base de dados tal como era no momento em que começou. Isto elimina dirty reads, non-repeatable reads e phantom reads sem recorrer a locks pessimistas.
Para ambientes concorrentes, o modelo MVCC (Multi-Version Concurrency Control) do YouTrackDB garante que escritas concorrentes não interferem entre si, e conflitos são detetados no commit através de optimistic locking.
Segurança baseada em predicados
Em vez de depender de middleware ou firewalls de aplicação, o YouTrackDB implementa segurança ao nível da base de dados com políticas baseadas em predicados YQL.
CREATE SECURITY POLICY readPublicOnly
SET READ = (classification = 'public')
GRANT POLICY readPublicOnly ON database.class.Document TO reader
Um utilizador com o papel reader nunca vê documentos classificados como confidential, mesmo que a query tente aceder-lhes diretamente. A filtragem é aplicada automaticamente pelo motor de query. Isto é útil para cenários multi-tenant ou para sistemas com diferentes níveis de clearance.
TinkerPop e Gremlin
Para quem já trabalha com o ecossistema Apache TinkerPop, o YouTrackDB implementa a API TinkerPop 3.x e suporta Gremlin como linguagem de query alternativa. Isto significa que podes usar as mesmas ferramentas (Gremlin Console, etc.) que usarias com JanusGraph ou Neo4j.
O suporte a GQL (Graph Query Language, o novo standard ISO) está em desenvolvimento, com integração prevista com Gremlin.
Como começar
O YouTrackDB pode ser usado de três formas:
- Embedded — adicionas a dependência Maven e a base de dados corre dentro da tua JVM
- Client-Server — modo standalone com acesso remoto
- REPL Console — para experimentar sem instalar nada, via Docker:
docker run -it youtrackdb/youtrackdb-console
Para projetos Maven com Java 21+:
<dependency>
<groupId>io.youtrackdb</groupId>
<artifactId>youtrackdb-embedded</artifactId>
<version>0.5.0-SNAPSHOT</version>
</dependency>
O uber-jar embedded faz shading de todas as dependências (Guava, Jackson, Groovy) para evitar conflitos de classpath.
// Criar BD em memória
try (var ytdb = YourTracks.instance(".")) {
ytdb.create("demo", DatabaseType.MEMORY,
"admin", "adminpwd", "admin");
try (var g = ytdb.openTraversal("demo", "admin", "adminpwd")) {
g.executeInTx(tx -> {
tx.command("CREATE CLASS Person EXTENDS V");
tx.command("CREATE PROPERTY Person.name STRING (MANDATORY TRUE)");
tx.yql("CREATE VERTEX Person SET name = 'Alice'").iterate();
});
var result = g.executeInTx(tx ->
tx.yql("SELECT FROM Person").toList()
);
System.out.println(result);
}
}
O que falta melhorar
O YouTrackDB está em versão 0.5.0-SNAPSHOT e ainda não atingiu a maturidade de produção para quem não é a JetBrains. A documentação é boa mas nota-se que foi escrita para consumo interno e adaptada para open source. O suporte a GQL está prometido mas ainda não chegou, e o ecossistema de ferramentas à volta é mais limitado do que o do Neo4j ou ArangoDB.
A comunidade está ativa no Zulip e a JetBrains parece estar a levar o projeto a sério — lançam builds diárias, benchmarks LDBC públicos, e aceitam contribuições. O potencial é enorme, especialmente para equipas que já usam Java e querem uma base de dados que combine grafos com um modelo OO familiar.
Conclusão
O YouTrackDB não é mais uma base de dados grafos. É uma base de dados orientada a objetos que usa grafos como modelo de armazenamento, com uma query language que qualquer pessoa que conheça SQL consegue usar ao fim de 5 minutos. Herança, polimorfismo, navegação por links sem JOINs, isolamento snapshot e segurança baseada em predicados — tudo isto faz dele uma ferramenta interessante, especialmente para projetos Java que precisam de modelar relações complexas.
Se usas IntelliJ IDEA, já experimentaste o YouTrack, ou simplesmente tens curiosidade em ver como uma base de dados OO-grafo se comporta num projeto real, vale a pena acompanhar o YouTrackDB. Mete no radar.
Comentários (0)
Nenhum comentário ainda. Seja o primeiro!
Deixar comentário