Stockages, schémas et projections
En bref : Neo4j porte le graphe consolidé ; les bases PostgreSQL, Redis et les index servent chaque composant ; le bus RabbitMQ n'est pas une source de vérité. Des données personnelles se trouvent dans au moins six stockages : la vitrine ne doit lire qu'un export filtré.
Cette annexe dit où une donnée est physiquement conservée. Le sens des entités est dans le modèle de données, les champs dans le dictionnaire.
Matrice des responsabilités
Statut : Confirmé dans le code et la configuration de déploiement de référence.
| Stockage | Contenu | Données personnelles | Rôle et restauration |
|---|---|---|---|
| Neo4j (graphe) | Personnes, structures, identifiants, notices, publications, contributions, revues, concepts, corrections | Oui : noms, identifiants, rattachements | Référence métier ; sauvegarde à l'arrêt |
| PostgreSQL du moissonneur | Collectes, erreurs, notices normalisées | Oui : noms et identifiants d'auteurs | Historique de collecte |
| PostgreSQL de SoVisu+ | Copie des entités, masquage, rôles, actions en attente, dépôts HAL, emails, jetons ORCID chiffrés | Oui, dont jetons | Copie reconstruisible et états propres non reconstruisibles |
| PostgreSQL de l'Org Registry | ROR, UAI, relations d'organisations | Non | Référentiel local |
| PostgreSQL de l'ordonnanceur (Airflow) | Exécutions, variables, connexions | Possible (journaux) | Utile à la reprise |
| PostgreSQL du service d'authentification (Keycloak) | Comptes, rôles, sessions | Oui, sensible | Identité et accès |
| Redis de la passerelle d'annuaire | Versions datées des personnes et structures | Oui : fiches complètes | Détection des changements ; persistant |
| Redis du moissonneur | Cache des API tierces | Possible | Reconstructible |
| RabbitMQ | Messages en attente | Oui, en transit | Transport seulement |
| Elasticsearch du graphe | Notices indexées | Oui : auteurs | Désactivé dans le déploiement |
| Index OpenSearch (Vocab Search, Taxi) | Vocabulaires, vecteurs de la taxonomie OpenAlex | Non | Recalculables |
| Export vitrine | Sous-ensemble public, filtré, daté | Limité à la liste blanche | Projection Saclay (extrait et comparatif du POC) |
Neo4j : garanties du schéma
Au démarrage, le graphe crée des contraintes d'unicité sur les identifiants, un index plein texte sur les noms de personnes, des index sur les types de structures et un index vectoriel. Toutes les règles métier ne sont donc pas garanties par la base. Certaines contraintes ne sont créées qu'en édition Enterprise ; l'édition par défaut est Community. Une contrainte Enterprise vise en outre une relation que les requêtes n'utilisent pas. Statut : Confirmé.
Sur l'instance : édition Community, 27 contraintes, 33 index, aucune contrainte sur une relation. Statut : Observé sur instance (dev) (données observées). Les noms de nœuds observés y diffèrent en partie du code lu (modèle de données).
PostgreSQL SoVisuPlus : projection et état applicatif
À chaque avis de changement venu du bus, SoVisu+ relit l'entité dans Apollo et met à jour sa base. Cette base est donc une copie du graphe, enrichie de données propres à l'interface : masquage, rôles et périmètres, actions en attente d'envoi, jetons ORCID, dépôts HAL, emails. Statut : Confirmé.
La restauration doit séparer la copie reconstruisible des actions, secrets et dépôts non reconstruisibles. Sans règle de réconciliation, Neo4j et SoVisu+ peuvent diverger temporairement (livraison et rejeu).
Elasticsearch IKG
Statut : Confirmé dans le code, désactivé dans la configuration de déploiement. L'index ne reçoit une notice qu'à sa création, pas à sa mise à jour. Fraîcheur et retrait des notices : À confirmer. Ce n'est pas une référence alternative à Neo4j.
Index OpenSearch
- Vocab Search : un index par vocabulaire, avec libellés multilingues et autocomplétion.
- Taxi : index vectoriel de la taxonomie OpenAlex. Son moteur est annoncé comme retiré dans OpenSearch 3 : migration à prévoir. Son état d'import n'est pas conservé entre deux redémarrages : un redémarrage peut relancer le calcul (À confirmer).
Contrôles encore nécessaires
- mesurer volumes et durées de rétention de chaque stockage ;
- définir des sauvegardes cohérentes entre Neo4j, PostgreSQL, Redis, RabbitMQ et les fichiers HAL ;
- séparer, dans le plan de reprise de SoVisu+, la copie reconstruisible des états propres ;
- confirmer la persistance du cache du moissonneur, de Vocab Search et de l'état de Taxi.
Preuves principales
- Configuration de déploiement ;
- initialisation du schéma Neo4j ;
- schéma Prisma de SoVisu+ ;
- modèles du moissonneur et schéma de l'Org Registry.
Les révisions sont centralisées dans Sources et preuves.