Les propriétés ACID des transactions
Les propriété ACID garantissent que l’exécution d’une transaction est réalisée de façon fiable. Dans Generic System, la gestion de la concurrence est entièrement régie par une règle fondamentale, qui peut être énoncée très simplement :
Toute lecture d’un objet ou d’un ensemble d’objets réalisée à un instant t est reproductible.
Les lectures au sens large sont en quelque sorte gravées dans le marbre dès lors qu’elles ont été effectivement réalisées. En effet, toute écriture réalisée pour un instant t’, ne saurait remettre en cause une tentative à venir de reproduire une lecture déjà réalisée pour un instant t. Ainsi t’ doit être ultérieur à t pour que l’écriture soit validée. Au contraire, si t’ est antérieur à t la suppression échouera car elle remettrait en cause le résultat d’une nouvelle lecture à l’instant t.
Une gestion différente de la concurrence
Generic System propose un système de gestion de la concurrence d’accès basé sur les algorithmes MVCC (Multi Versions Concurrency Control). Ces algorithmes ont été revisités afin que les nœuds du graphes n’entretiennent plus qu’une seule version de l’information qu’ils contiennent. Ils ne peuvent plus être modifiés, naissent lorsqu’ils sont validés par une transaction et vivent jusqu’à ce qu’ils meurent lorsqu’une autre transaction valide ensuite leur suppression.
Le Garbage Collector
Lorsque l’utilisateur supprime un nœud du graphe, il est dans un premier temps supprimé de façon logique. La date de fin de vie du nœud est alors enregistrée, à condition qu’elle ne vienne pas contredire une lecture déjà réalisée pour un instant ultérieur. Périodiquement, le Garbage Collector parcourt le graphe et supprime physiquement les nœuds marqués pour la suppression, à condition que le nœud soit devenu inaccessible aux transactions (du fait de leur timeout et de l’ancienneté de la suppression).
En résumé
- Toute lecture réalisée pour un instant t est reproductible.
- La suppression est d’abord logique, puis définitive.
- Les Generic sont immuables dans la gestion du graphe interne.
Ce chapître sur la concurrence est assez complexe. Abordons un sujet différent et voyons dans le prochain billet une nouvelle manière de créer les Generic.