Citation : Tu écris les données en base au fur et à mesure ou bien une fois de temps en temps (en récupération d'erreur, notamment) ?
J'oubliais ce point. Ce que je décidé pour le moment, c'est d'utiliser un timeout. quand un process reçoit un timeout, il fait ses sauvegardes en base de données puis il se termine. il sera redémarré si besoin par mon pidstore.
Mais ça pose un problème : s'il est contacté pendant la sauvegarde, il ne sera pas encore terminé, global va donc renvoyer son pid en échange de la clé, mais mon process ne répondra pas au message puisqu'il sera en train de terminer, donc le message sera perdu. je pourrais spawn un process qui s'occupera de la sauvegarde, ce qui minimiserait le risque de race condition car le process terminera beaucoup plus rapidement, ne s'occupant plus de la sauvegarde, mais la race condition sera toujours possible. de plus, s'il la clé est demandée et qu'on crée un nouveau process avant que la sauvegarde soit terminée, le process pourrait charger des données en base pas encore modifiées. (sauf si l'ORM met tous les select / insert / update à la queue mais j'en doute, ça ferait un gros bottleneck. faut voir)
Donc ce problème n'est pas résolu. en attendant je peux le minimiser en faisant des sauvegardes non seulement lors des timeout mais aussi après des opérations importantes.