Migrations formelles & Privacy-by-Design
Moteur catégoriel avec garantie mathématique des migrations. Zéro SQL, conformité RGPD (droit à l'oubli) native, performances de Rust et Apache Arrow.
Les outils classiques (Flyway, dbt) gèrent les bases comme une liste de scripts SQL : on ne prouve jamais qu'une migration est correcte. De plus, retirer proprement des données pour le RGPD ("Soft Delete") détruit bien souvent l'intégrité de ces modèles.
CATRUSTDB unifie ces deux défis. Une migration de schéma devient un foncteur mathématique entre catégories (Sigma Σ, Delta Δ, Pi Π). Vous supprimez ou déplacez des blocs de données sans écrire une faille SQL : la base prouve elle-même la solidité du changement (Data Contract).
La magie du modèle permet une gestion Privacy-by-Design : un effacement désactive toutes les données concernées (même celles en relation complexes), puis compacte le WAL via cryptographie. Plus besoin de réparer la Prod pour se conformer au droit à l'oubli CNIL.
Left Kan extension. Déplace les données de S vers T en appliquant le foncteur F.
{"cmd": "sigma",
"target_cql": "schema Org { ... }",
"mapping_cql": "mapping Rename ..."}
Adjoint droit de Σ. Rapatrie les données de T vers S en inversant le foncteur F. Rollback exact.
{"cmd": "delta",
"source_cql": "schema Company { ... }",
"mapping_cql": "mapping Rename ..."}
Ne conserve que les lignes dont toutes les contraintes FK restent vérifiées après migration.
{"cmd": "pi",
"target_cql": "schema Org { ... }",
"mapping_cql": "mapping Rename ..."}
| Fonctionnalité | CATRUSTDB | Flyway | Liquibase | dbt |
|---|---|---|---|---|
| Paradigme | Foncteur catégoriel | Scripts SQL versionnés | Changelogs XML/YAML | Modèles SQL Jinja |
| Rollback | ΔF (pullback exact) | Script SQL undo manuel | rollback changeSet | Non natif |
| Validation | Pré-validation formelle | Aucune avant exécution | Hash + checksum | Tests post-exécution |
| Dépendance SQL | Zéro SQL | 100 % SQL | 100 % SQL | 100 % SQL |
| Sémantique | Adjonction Σ ⊣ Δ ⊣ Π | Aucune | Aucune | Aucune |
| Incrémental | ΣΔ avec checkpoint | Via script manuel | Via contexts | Via incremental models |
| Snapshot 1M lignes | 93 ms (13.5×) | — | — | — |
| Chargement 1M lignes | ~5 ms (~700×) | — | — | — |
| Lignage automatique | Log d'adjonctions | Non | Changelog | DAG de modèles |
schema Company {
Employee : { emp_name : String, salary : Float }
Department : { dept_name : String }
works_in : Employee -> Department
}
schema Org {
Staff : { full_name : String, pay : Float }
Team : { team_name : String }
member_of : Staff -> Team
}
mapping Rename : Company -> Org {
Employee -> Staff
Department -> Team
emp_name -> full_name
salary -> pay
dept_name -> team_name
works_in -> member_of
}
# Chargement + migration en une commande
echo '{"cmd":"load","schema_cql":"...","instance_cql":"..."}' | nc localhost 7474
echo '{"cmd":"sigma","target_cql":"...","mapping_cql":"..."}' | nc localhost 7474
→ {"ok":true,"schema":"Org","entities":[{"name":"Staff","rows":3},{"name":"Team","rows":2}]}
# Rollback : Δ ramène les données dans Company
echo '{"cmd":"delta","source_cql":"...","mapping_cql":"..."}' | nc localhost 7474
API native pour microservices et scripts. Client Python inclus (zéro dépendance).
from catrustdb import connect
db = connect(port=7474)
db.load(schema_cql=cql)
rows = db.query("query Q {…}")
Compatible psql, JDBC, SQLAlchemy. Utilisez vos outils SQL habituels.
psql -h localhost -p 5433
SELECT * FROM Employee
LIMIT 10;
Transfert haute performance pour l'analytique. Zero-copy vers pandas et Polars.
import pyarrow.flight as fl
client = fl.connect("grpc://localhost:32100")
df = client.do_get(
fl.Ticket(b'{"entity":"Employee"}')
).read_all().to_pandas()
docker run -p 7878:7878 catrustdb/catrust:latest
Télécharger depuis GitHub Releases (Linux, macOS, Windows) :
catrust serve --schema mon_schema.cql
# → Studio web sur http://localhost:7878
pip install catrustdb # ou télécharger le .whl depuis GitHub Releases
from catrustdb import connect
with connect(port=7474) as db:
db.load(schema_cql=open("schema.cql").read())
print(db.query("query Q { from e:Employee select name->e.emp_name }"))
Flyway suppose que vous savez écrire du SQL correct. CATRUSTDB suppose que vous voulez prouver que votre migration est correcte.
| Situation | Flyway | CATRUSTDB |
|---|---|---|
| Va-t-elle casser des FKs ? | Découverte en prod | validate_migration avant exécution |
| Puis-je revenir en arrière ? | Script undo manuel | ΔF — retour exact garanti |
| Mes migrations composent-elles ? | Pas de garantie | ΣG∘F = ΣG ∘ ΣF |
| Quelle est la lignée ? | Logs manuels | Log d'adjonctions automatique |