CATRUSTDB

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.

Le problème : SQL est fragile et la conformité est complexe

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.

Trois opérations fondamentales

ΣF — Push-forward

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 ..."}

ΔF — Pullback

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 ..."}

ΠF — Right Kan extension

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 ..."}

Comparaison

FonctionnalitéCATRUSTDBFlywayLiquibasedbt
ParadigmeFoncteur catégorielScripts SQL versionnésChangelogs XML/YAMLModèles SQL Jinja
RollbackΔF (pullback exact)Script SQL undo manuelrollback changeSetNon natif
ValidationPré-validation formelleAucune avant exécutionHash + checksumTests post-exécution
Dépendance SQLZéro SQL100 % SQL100 % SQL100 % SQL
SémantiqueAdjonction Σ ⊣ Δ ⊣ ΠAucuneAucuneAucune
IncrémentalΣΔ avec checkpointVia script manuelVia contextsVia incremental models
Snapshot 1M lignes93 ms (13.5×)
Chargement 1M lignes~5 ms (~700×)
Lignage automatiqueLog d'adjonctionsNonChangelogDAG de modèles

Exemple : renommage de schéma

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

4 protocoles, un seul moteur

TCP NDJSON — API native pgwire — Compatible PostgreSQL Arrow Flight — pandas, Polars, DuckDB HTTP — Catrust Studio

TCP NDJSON

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 {…}")

pgwire

Compatible psql, JDBC, SQLAlchemy. Utilisez vos outils SQL habituels.

psql -h localhost -p 5433
SELECT * FROM Employee
 LIMIT 10;

Arrow Flight

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

Démarrage rapide

Docker (recommandé)

docker run -p 7878:7878 catrustdb/catrust:latest

Binaire

Télécharger depuis GitHub Releases (Linux, macOS, Windows) :

catrust serve --schema mon_schema.cql
# → Studio web sur http://localhost:7878

Python

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 }"))

Pourquoi pas Flyway ?

Flyway suppose que vous savez écrire du SQL correct. CATRUSTDB suppose que vous voulez prouver que votre migration est correcte.

SituationFlywayCATRUSTDB
Va-t-elle casser des FKs ?Découverte en prodvalidate_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 manuelsLog d'adjonctions automatique