12
votes

Persistance simple, moderne, robuste et transparente des structures de données pour Perl

Je cherche une solution pour de transparence Persist Perl Structures de données (pas même des objets, mais la prise en charge des objets serait un plus) sans références circulaires. Je m'en fiche beaucoup sur le backend, mais je préférerais Json. Le nombre d'objets serait relativement faible (quelques milliers de hashrefs avec environ 5 clés). Par la persistance "transparente", je veux dire que je ne veux pas avoir à commettre des modifications au backend de stockage à chaque fois que je mettez à jour la structure de données en mémoire.

Voici comment le code serait parfaitement: < Pré> xxx

jusqu'à présent, j'ai regardé:


0 commentaires

3 Réponses :


3
votes

Pourquoi ne pas utiliser JSON ? C'est plutôt facile (sauf si j'ai mal compris votre question), tout ce que vous feriez, c'est que:

use JSON;
# serialize to file
open(my $fh, ">myfile");
print $fh encode_json($ds); 
close $fh;
# deserialize from file
open(my $fh, "<myfile");
local $/ = undef;
my $content = <$fh>;
$ds = decode_json($content);
close $fh;


1 commentaires

Je cherche une persistance transparente (j'espère que c'est le terme correct?) Par la persistance "transparente", je veux dire que je ne veux pas avoir à commettre des modifications au backend de stockage à chaque fois que je mettez à jour la structure de données en mémoire. J'ai édité la question; Merci d'avoir souligné cela.



3
votes

Je ne pense pas que la persistance transparente est une très bonne idée. Supposons que vous ayez une implémentation hypothétique qui lie la structure de données PERL au monde extérieur. Pour être transparent, chaque écriture dans la structure doit être détectée et les données extérieures à jour. Cela va probablement être assez coûteux et se terminer par beaucoup d'activité de disque à moins que vous n'ayez de backend sophistiqué avec un accès aléatoire rapide. Je ne peux pas imaginer que les mises à jour du fichier JSON soient efficaces.

Certaines options:

  • Utilisez le backend de la base de données (DBM :: profond, db_file ou kiokudb)
  • Utilisez une boutique à valeur de clé en tant que Backend (Memcached, Redis)
  • Définissez le flux de travail cohérent sur les données et sérialiser / désérialiser dans le bon moment

0 commentaires

5
votes

Pour atteindre votre objectif de "transparence", vous devez être abstrait dans un cadre (comme la Chambwez suggéré) ou utilisez des variables D qui se sauveront sur un disque chaque fois qu'ils " re mis à jour. DBM HASHES Utilisez Cravate de cette manière, donc dbm :: profond est probablement votre meilleur choix; Tout ce que je suis au courant de vous demander de lui dire explicitement lorsque vous écrivez des données et / ou des caches écrit au nom de la performance.


0 commentaires