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).

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:

  1. Embedded — adicionas a dependência Maven e a base de dados corre dentro da tua JVM
  2. Client-Server — modo standalone com acesso remoto
  3. 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.

Recursos adicionais

Comentários (0)

Nenhum comentário ainda. Seja o primeiro!

Deixar comentário