Question

structures de données persistantes dépendent du partage de la structure pour l'efficacité. Pour un exemple, voir .

Comment puis-je conserver le partage de la structure quand je sérialiser les structures de données et les écrire dans un fichier ou base de données? Si je viens de traverser le datastructures naïvement, je vais stocker les valeurs correctes, mais je vais perdre le partage de la structure. Je voudrais être en mesure d'enregistrer des structures-données avec des composants partagés dans un fichier, les restaurer, et ont encore la majeure partie de la structure commune dans les données restaurées.

Était-ce utile?

La solution

Vous voulez une certaine forme de hachage consing. Ce problème a été bien étudié. sur combinateurs Pickler explique détail comment sérialisation et unserialize tout en préservant le partage.

Autres conseils

Il existe deux méthodes évidentes, je peux penser, et ils sont liés.

  1. Ne pas sérialiser les structures , sérialisation nœuds . Donc, vous devez stocker un enregistrement sérialisé pour chacun des noeuds dans l'arborescence exemple que vous avez donné, et que vous convertissez toutes les références de nœud à une base de données nom clé du nœud. Cela vous donne automatiquement le partage, mais a le coût d'avoir à faire plusieurs recherches Décrocher la références afin de charger une structure.
  2. Couleur nœuds de propriété, comme dans votre exemple. Avoir un concept dont la structure d'un nœud donné « appartient » à et seulement sérialiser les noeuds dans une structure qui appartiennent à cette structure. Liens vers des noeuds dans d'autres structures se remplacées par une référence à cette structure et le nœud en question. Cela vous permet de charger toute une structure à la fois, mais peut vous amener à avoir à charger toutes les structures liées si elles sont fortement liées entre elles.

Le choix entre ces options dépend de ce que vous essayez d'optimiser pour, et quelles sortes de liens vous attendre à voir dans la pratique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top