各クエリが数百万行を返すことができる MYSQL データベースに SELECT ステートメントを発行するカスケード アプリケーションを作成することを検討しています。
ここに示すように、各データベースは N 個のスレーブと 1 つのマスターに存在します。
JDBCTap では、1 つのホスト名しか渡すことができないことがわかります。これは、すべてのマッパーが単一のスレーブに接続しようとすることを意味します (他の (N-1) スレーブはアイドル状態です)。
スレーブの前にロード バランサーがないと仮定すると、N 個のスレーブ全体にマッパーの接続を分散できる Java パッケージ/モジュール/プロキシ (または、カスタマイズされた JDBCTap 実装) を使用できますか?
これを行うと思われるハードウェア プロキシを使用したサンプル スクリプトの詳細は、http: //blog.netoearth.com/html/201006/building-a-mysql-load-balancing-proxy-with-trafficscript.htmにあります。
そのようなものが存在しない場合は、次のアルゴリズムを使用して、独自の JDBCTap (マッパーからの接続を N 個のスレーブに分散させる) を作成する必要があります。
- 外部データベース (同時書き込み/更新を適切にサポートするもの) に N 個のスレーブのリストを保持します。
- 各スレーブに接続したマッパーのカウンターを持っている
- マッパーがスレーブに接続する必要があるたびに、このデータベースにクエリを実行して、負荷が最も少ない (接続されているマッパーの数が最小である) スレーブを見つけます。衝突時のランダムタイブレーク。
これは良いアイデアのように聞こえますか?上記で言及した「同時書き込み/更新を適切にサポートする」外部データベースは何でしょうか? (Cassandra、VoltDB など)