4

シリアル化したいいくつかのMooseオブジェクトと他のいくつかの単純なハッシュオブジェクト(ハッシュ、配列)があります。

最初はシンプルなものを使いました

my $obj_store_file = nstore($obj);

my $obj = retrieve($obj_store_file);

これはうまくいきました。

後で、私はとについて見つけましMooseX::StorageKiokuDB。私はそれらを使ってそれらが持ついくつかの利点を楽しんでみましたが:

  • MooseX::Storage複数回参照されるオブジェクトを再作成したようです。たとえば、シリアル化されたオブジェクトの1つにいくつかの属性が含まれており、それぞれが別のオブジェクトの同じインスタンスを参照しています。シリアル化する前は、これらの参照はすべて明らかに同じです。つまり、すべて同じオブジェクトを指しています。を使用したシリアル化/逆シリアル化の後MooseX::Storage、この1つのオブジェクトが複製され、各参照がオブジェクトの別のインスタンスを指します。MooseX::Storageオブジェクトグラフを表現するのは適切ではなく、試してみたいと言われましたKiokuDB
  • KiokuDB私はそうしましたが、自分のニーズにはやり過ぎだと感じました。DBが提供できるすべての凝ったものは必要ありません。残念ながら、私のオブジェクトの1つは非常に大きく、デフォルトを使用してシリアル化するとメモリが詰まるため、カスタムシリアライザーを作成するか、その「データ」部分を個別に保存してからコスチュームを作成する必要があるようKiokuX::Moduleです...これもかなりやり過ぎです。

だから、私は昔ながらのStorableまたはYAMLに戻ります。KiokuDB私の質問は単純です。はい、 (特にオブジェクトグラフを維持するという事実)とおそらくMooseX::Storage(後者については実際には何も見つかりませんでしたが)にもいくつかの利点があります。しかし、これらの利点は私には実際には役に立たないので、StorableまたはYAMLを使用しない理由はありますか?

言い換えれば、この方法で(Moose)オブジェクトを保存することに何か問題がありますか?それは「違法」ですか?

4

1 に答える 1

1

私の経験では、データをシリアル化する理由によって異なります。ウィンドウのサイズや位置など、プログラムの状態については Storable が好きです。構成データや、アプリケーションの別のコピーと交換する可能性のあるデータには、YAML を使用することをお勧めします。(つまり、ユーザー間で共有 -- 異なるバージョンの Perl または Storable を使用しているユーザーは、Storable ファイルを読み取れない場合があります。) Storable はオブジェクト グラフをサポートします (フリーズ/解凍が正しく行われていることを前提としています)。YAMLについてはわかりません。

于 2010-10-27T13:30:03.963 に答える