0

ドキュメント データベースで動的言語からオブジェクトを永続化する最も洗練された方法についての洞察はありますか?

私は C# の経験が豊富で、Python でプログラミングを始めたばかりです。同時に、MongoDB のコツを学ぼうとしています。

今、私は疑問に思っています: 私のデータを MongoDB データベースに永続化する最もエレガントな方法は何ですか? 私はいくつかのアプローチを検討しました:

  1. すべての Python クラスで、状態を表す辞書とリストのグラフを作成できるようにします。さらに、そのようなグラフから状態を初期化できるようにします。オブジェクトを永続化したい場合は、そのグラフ表現を要求して永続化します。オブジェクトを取得したいときは、ドキュメント グラフを取得し、これを__init__クラスのメソッドに提供します。

  2. 特定のオブジェクトを検査し、辞書とリストのグラフを作成できる別の Mapper クラスを作成します。これを MongoDB に保存できます。マッパーは、データがデータベースから取得されたオブジェクトの作成も担当します。

  3. ドキュメント オブジェクト マッパーであるmongoengineを試してみました。ただし、特定のクラス (ドキュメント) からクラスを派生させなければならなかったときはがっかりしました。Microsoft の Entity Framework 1.0 と POCO サポートの欠如を思い出しました。特定のクラスから強制的に派生させたくありません。気分が悪いですが、これが本当に動的言語の問題なのかどうかはわかりません。

私の思考は、C# のバックグラウンドによって妨げられていますか? 動的言語が提供する柔軟性の範囲を理解していないと確信しているので、ベスト プラクティスに関するアドバイスやヒントをいただければ幸いです。

ありがとうございました。

4

1 に答える 1

1

Python では、getstateなどのいくつかの特別なメソッドが定義されており、クラスがインスタンスをシリアル化および逆シリアル化する最適な方法を正確に定義できるようになっています。それらはすべてモジュールによって内部的に使用されpickleます (次に、この情報を使用して「ブロブ」、つまりバイトの文字列を生成し、そのようなブロブからオブジェクトを復元します)。不透明なブロブを介して、基本的pickleには、グラフをブロブに変換する直前に停止するように手順を微調整する問題です。(サブクラス化などのよりエレガントな方法でこのようにカスタマイズするように設計されていないため)のコピーアンドペースト編集によってそれを行う必要があると思いますがpickle.py、それでもすべてをやり直すことに関して多くの作業を節約できるはずですスクラッチ。

このアプローチは、オプション1と2の間のどこかにあると思います-クラスは、特定のニーズに応じてのみそのような特別なメソッドを定義する必要があり、さまざまな可能性を調整するために必要な作業のほとんどは、ピクルバリアントによって処理されます(シリアル化されたフォームがブロブである「通常の」ケースでは、pickle 自体によって処理されます)。

于 2010-02-25T22:25:54.953 に答える