Architecture des résultats

En version 4.1.x.x, le stockage des résultats de simulation ne se faisait plus dans la base de données mais dans un fichier binaire. Les performances et l'utilisation mémoire en étaient grandement améliorées.

Les résultats sont des informations empilées au fur et à mesure du temps. Il n'y a aucune modification des résultats une fois ceux-ci enregistré.

Le format de sauvegarde s'appuie sur ce constant pour stocker l'information.

Structure d'un enregistrement: - mark qui indique le type de résultat (et possiblement la version du format) - le résultat

Les enregistrements sont mis bout à bout. Un gestionnaire spécifique (lecture/écriture) doit être écrit pour chaque type de résultat.

Format du mark

Le mark est un long qui represente en fait une chaine de 8 caractères. Pour encoder et decoder la chaine, il faut utiliser BitUtil.toMark BitUtil.fromMark

Résultat matriciel

Structure: - (long) mark: 'resmat01' - (int) step: le numero du pas de temps - (UTF8) name: nom du résultat - (int) dimSize: le nombre de dimension de la matrice - (UTF8)+ dimNames: les noms de différentes dimensions - (int)+ dims: la taille de chaque dimensions - (UTF8)+ sems: les semantiques de toutes les dimensions - (int) dataSize: le nombre de cellules de la matrice - (double)+ data: toutes les valeurs de la matrice

Performance

Les simulations grâce à ce nouveau format sont environs 6 fois plus rapide, mais surtout, elles ont une consomation mémoire beaucoup moindre qui permet de faire des simulations plus importantes dans des temps acceptable, vu que la JVM utilise moins le GC.

Développement futur

Avec ce mécanisme, il sera simple d'ajouter de nouveaux types de résultat. Un lecteur générique redirigerais la lecture vers le bon type en fonction du mark qui est devant chaque résulat.

Pour l'écriture chaque objet aurait son propre moyen d'écrire les informations dont il a besoin pour se recharger en mettant toujours un mark particulier avant d'enregistrer ces informations.

Problème

Ce mécanisme utilisant les fichiers mappés, Windows n'arrivait pas toujours à effectuer l'adressage mémoire de ce fichier. De plus, suite à l'utilisation des matrices creuse, et de grands volumes de données, les matrices sont maintenants stockées en fichier textes dans un stockages optimisé pour les matrices.