4

読み取り専用トランザクションで実行された Spring-Hibernate アプリケーションからのすべてのクエリを PostgreSQL スレーブにディスパッチし、すべての読み書きトランザクション クエリをマスターにディスパッチしたいと考えています。

Spring でアノテーション駆動型トランザクションを使用しているときに、トランザクションが読み取り専用として定義されている場合、PostreSQL ドライバーは選択クエリのみを実行できます。これは明らかですが、ドライバーがマスター スレーブ構成でどのように動作するかについては言及されていません。たとえば、MySQL ドライバーには、読み取り専用のトランザクション クエリをスレーブに自動的にディスパッチするレプリケーション接続クラスがあります。

解決策の 1 つは、複数の Hibernate セッション ファクトリを使用し、1 つを選択用に、もう 1 つを更新用にスレーブを指すように使用することですが、それでは手動処理が多すぎます。これをどのように設計すればよいですか?

4

1 に答える 1

0

これは驚くほど複雑な質問であり、答えは簡単ではありません。ディスパッチを行うレイヤーが、トランザクションが読み取り専用であるかどうかを認識できるように、これをディスパッチする必要があることに注意してください。

おそらく最もクリーンな解決策は、ミドルウェアにディスパッチを実装することです。これには、機能的なディスパッチであるという利点があります。何をしようとしているのかはわかっているので、そこにディスパッチしましょう...

2 番目のオプションは、おそらく PGPool などでディスパッチすることです。これらの場合、サーバー側で準備されたクエリを避けたいと思うでしょう。中間層に提供する知識が多ければ多いほど、発生する問題が少なくなるからです。

于 2013-12-07T09:42:46.533 に答える