0

たとえば、オブジェクトユーザーをデータベース(Redis)に保存しています。いくつかのフィールドがあります。

  • ストリング ニック
  • 文字列 パスワード
  • 文字列 メール
  • 投稿を一覧表示
  • コメントを一覧表示
  • フォロワーを設定する
  • 等々...

Pythonプログラムでは、このオブジェクトと同じフィールドを持つクラス( User )があります。このクラスのインスタンスは、データベース内のオブジェクトにマップされます。問題は、最高のパフォーマンスを得るためにDBからデータを取得する方法です。

  1. インスタンス作成時に各フィールドの値をロードし、それを使用してフィールドを初期化します。
  2. フィールド値の要求時に毎回フィールド値をロードします。
  3. 2つ目と同じですが、値の読み込み後に、フィールドのプロパティを読み込み済みの値に置き換えます。

psredisはローカルホストで実行されます

4

1 に答える 1

2

方法は完全に要件に依存します。

プロパティを読み取って変更するクライアントが1つしかない場合、これはかなり単純な問題です。データを変更するときは、現在のPythonプログラムのインスタンス属性を変更するだけで、同時に、プログラムの応答性を維持しながらDBの同期を維持します。そのためには、ブロッキング呼び出しを別のスレッドにアウトソーシングするか、グリーンレットを利用する必要があります。クライアントが1つしかない場合は、値を検索するたびにDBからプロパティをフェッチする必要はありません。

データを読み取る複数のクライアントがあり、データを変更するクライアントが1つだけの場合は、必要な同期のレベルを検討する必要があります。100%の同期が必要な場合は、値のルックアップごとにDBからデータをフェッチする必要があります。

データベース内のデータを変更するクライアントが複数ある場合は、独自のDBキャッシュ/マッパーを作成するよりも、堅実な業界標準ソリューションを検討することをお勧めします。

(2)と(3)の区別は実際には意味がありません。ルックアップごとにデータをフェッチする場合、データを「保存」する必要はありません。ご覧のとおり、複数のクライアントが関与している可能性がある場合、これらのことはすぐに非常に複雑になり、正しく理解するのは非常に困難です。

于 2012-09-12T19:09:00.500 に答える