0

私は2つのサーバーを持っています:

  • サーバー A: MySql
    • 表 A
      • キー A
      • 外部キー b
  • サーバー B: MsSQL
    • 表 B
      • キー-b
      • 外部キー a

おそらく、関係を処理するメソッドを持つ 2 つのオブジェクトがあります。

TableA->getRelatedTableB();

TableB->getRelatedTableA();

これは、ほとんどの ORM で簡単に実装できます。しかし、データベース サーバーごとに 1 つのクエリだけで大量のオブジェクトを取得したい場合はどうすればよいでしょうか? 理想的には、フレームワークがこれを抽象化し、論理結合を実行して、開発者がデータベースについて何も知らないふりをできるようにします。何かのようなもの:

FinderObject->getAlotOfTableAObjectsWithTableBAlreadyLoaded()

そして、各データベースに対してクエリを実行し、効率的な方法で結果を論理的に結合します。


これをDoctrineまたは他のphp ORMフレームワークで実装する方法を知っている人はいますか?

4

3 に答える 3

1

Doctrine はクロスデータベース結合を明示的にサポートしていませんが、それを行う方法があります:

http://www.doctrine-project.org/blog/cross-database-joins

于 2009-07-27T18:29:42.290 に答える
0

私はそれができることを知りません...しかし、Propel、Memcached、およびMySQLを一緒に使用できるかもしれません. Memcached を使用して分散メモリ キャッシュをセットアップし、そこに MySQL データを格納する方法があるかどうかを確認します。Memcached は分散されているため、両方の MySQL サーバーが Memcached にデータを保存できます。次に、そのメモリにアクセスする方法を見つける必要があります(メモリテーブルを介して?)。非常にトリッキーな状況のようです。

おそらく、問題は間違った方向からアプローチされています。解決しようとしている問題を教えてください。角を曲がったところに、まったく異なる (そしてより簡単な!) 解決策があるかもしれません。

于 2009-07-27T18:22:36.270 に答える
0

これに対する 1 つの解決策はフェデレーテッド テーブルを使用することですが、これはパフォーマンスが良くないことを読みました。すべては、それをどのように使用する必要があるかによって異なります。

于 2009-07-27T17:57:46.710 に答える