Back to flin
flin

Relations et chargement Eager/Lazy

Comment FlinDB gère les relations entre entités avec le chargement eager, la résolution lazy, les requêtes inverses et l'auto-indexation -- le tout sans jointures SQL.

Juste A. Gnimavo (Thales) & Claude | March 26, 2026 2 min flin
EN/ FR/ ES
flinflindbrelationshipsloadingjoins

Le problème le plus difficile dans l'abstraction de base de données n'est pas le stockage. C'est la navigation des relations. FlinDB adopte une approche différente : des déclarations de relations explicites, l'indexation automatique, et des stratégies de chargement contrôlées.

La session 164 a été celle où les relations sont devenues réelles. Dix fonctionnalités, treize tests, neuf cent soixante-douze lignes de Rust.

Déclarer des relations

flinentity Post {
    title: text
    body: text
    author: User           // One-to-many
}

entity Article {
    title: text
    tags: [Tag]            // Many-to-many
}

Chargement eager avec .with()

rustlet results = db.query("Post")
    .with("author")
    .execute()?;

Le .with("author") indique au constructeur de requêtes de résoudre la référence author pour chaque Post dans le résultat. Au lieu de N recherches séparées, ZeroCore résout toutes les références en lot.

Requêtes par référence

rustlet user_posts = db.query("Post")
    .where_ref("author", user_id)
    .execute()?;

Parce que les champs de référence sont automatiquement indexés, les requêtes par référence bénéficient de recherches d'index O(1).

Requêtes inverses

rustlet posts = db.find_referencing("Post", "author", user_id)?;
if db.has_references("Post", "author", user_id)? {
    // Cannot delete user -- they have posts
}
let post_count = db.count_references("Post", "author", user_id)?;

La décision de stratégie de chargement

FlinDB n'a pas de chargement lazy implicite. C'est un choix de conception délibéré qui élimine une catégorie entière de bugs de performance (le problème N+1).

  • Pas d'appel .with() : les champs de référence contiennent l'ID brut. Pas de requête implicite.
  • Avec .with("author") : les champs de référence sont résolus en entités complètes.
  • Avec .with_all() : tous les champs de référence sont résolus.

Cela force le développeur à réfléchir à son pattern d'accès aux données au moment de la requête.


Ceci est la partie 7 de la série « How We Built FlinDB ».

Navigation de la série : - [060] Aggregations and Analytics - [061] Index Utilization - [062] Relationships and Eager/Lazy Loading (vous êtes ici) - [063] Transactions and Continuous Backup - [064] Graph Queries and Semantic Search

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude deblo

Le segfault qui n'était pas le nôtre : livrer le tracking du jour de lancement de Déblo la nuit du lancement — analytics conditionnées par l'environnement, attribution native des stores, trois bugs que le compilateur ne pouvait pas voir, et un build à court de mémoire que nous avons diagnostiqué au lieu de le rétablir

Le 1er juillet 2026 — jour de lancement — le risque n'a jamais été le texte. C'était les campagnes payantes qui partaient à l'aveugle. Voici le build-log de la livraison des analytics et de l'attribution d'installation de Déblo sous forme de code, la nuit du lancement : des tags GA4, Meta et LinkedIn conditionnés par l'environnement, qui se déploient sans risque avant même que les comptes publicitaires existent ; une attribution routée par les canaux natifs des stores plutôt que par le pixel web ; un audit adverse qui a attrapé trois bugs que le typecheck et le build passaient tous les deux ; et un déploiement Easypanel qui a segfaulté au premier build — que nous avons prouvé ne pas venir de notre code avant d'en changer une seule ligne.

18 min Jul 1, 2026
deblolaunch-dayclaude-opus-4.8claude-code +26
Thales & Claude thales

Treize agents, quarante-trois minutes : la première session Workflow de Claude Fable 5, et ce qu'un script d'orchestration déterministe change aux builds multi-agents

Un prompt, treize agents, quarante-trois minutes : la première session de production avec Claude Fable 5 et l'outil Workflow de Claude Code a livré un site web de production complet de sept pages plus un endpoint backend de capture de leads, en un seul commit. Le carnet de bord : le script d'orchestration déterministe, le patron d'injection de contrat entre les phases, l'économie par agent du fan-out parallèle, et le suspense de la limite de session que le journal de reprise a transformé en non-événement.

23 min Jun 12, 2026
claude-fable-5claude-codeworkflow-toolmulti-agent +10
Thales & Claude casp

La porte a détecté sa propre dérive : une journée dans CASP avec Claude Fable 5

Nous avons confié au modèle Claude le plus autonome à ce jour les clés de CASP — le CLI open source qui garde les agents de code IA honnêtes face à git — avec l'autorité de rejeter notre propre roadmap. Il a rejeté cinq choses, trouvé deux vrais bugs dans le validateur en le dogfoodant, les a corrigés sous une porte à deux auditeurs, et a laissé casp check entièrement vert sur son propre dépôt pour la première fois. CASP 0.3.0 en est le résultat.

16 min Jun 10, 2026
caspzerosuiteworkflowai-cto +9