5

ID マップと作業単位パターンは、sqlalchemy が django.db よりもはるかに魅力的である理由の一部です。ただし、ID マップがどのように機能するか、またはアプリケーションが wsgi として構成されていて、orm が共有サービスではなく API 呼び出しを介して直接アクセスされる場合に機能するかどうかはわかりません。apache は、リクエストごとに独自の Python インスタンスを持つ新しいスレッドを作成すると思います。したがって、各インスタンスは sqlalchemy クラスの独自のインスタンスを持ち、ID マップを利用できなくなります。これは正しいです?

4

2 に答える 2

7

ID マップのパターンを誤解していると思います。

出典:http : //martinfowler.com/eaaCatalog/identityMap.html

ID マップは、単一のビジネス トランザクションでデータベースから読み取られたすべてのオブジェクトの記録を保持します。

レコードは、単一のビジネス トランザクションの ID マップに保持されます。これは、Web サーバーがどのように構成されていても、おそらくリクエストよりも長く保持する (またはセッションに保存する) ことはないことを意味します。

通常、1 つのビジネス トランザクションに多くのユーザーが参加することはありません。いずれにせよ、矛盾することをしてしまう可能性があるため、ユーザーにオブジェクトを共有させたくないでしょう。

于 2011-05-03T12:57:56.567 に答える
0

したがって、これはすべて、sqlalchemy 接続のセットアップ方法に依存します。通常は、各 wsgi リクエストを管理して、独自のスレッドローカル セッションを持つようにします。このセッションは、その進行中のすべて、項目の追加/変更/などについて知ることができます。ただし、各スレッドは他のスレッドを認識していません。このように、モデルとマッピングのロード/事前設定は起動時に共有されますが、各リクエストは他のリクエストとは独立して動作できます。

于 2011-05-03T12:42:08.330 に答える