0

各クエリが数百万行を返すことができる 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 個のスレーブに分散させる) を作成する必要があります。

  1. 外部データベース (同時書き込み/更新を適切にサポートするもの) に N 個のスレーブのリストを保持します。
  2. 各スレーブに接続したマッパーのカウンターを持っている
  3. マッパーがスレーブに接続する必要があるたびに、このデータベースにクエリを実行して、負荷が最も少ない (接続されているマッパーの数が最小である) スレーブを見つけます。衝突時のランダムタイブレーク。

これは良いアイデアのように聞こえますか?上記で言及した「同時書き込み/更新を適切にサポートする」外部データベースは何でしょうか? (Cassandra、VoltDB など)

4

1 に答える 1

0

一般に、JDBC は並列処理をサポートしないため、大規模なロードのボトルネックとなります。

そのようなプライマリ/スタンバイ アーキテクチャでは、MySQL バックアップを介してスタンバイから TSV にデータをプルし、それらを並列に HDFS にロードするのはどうですか?

于 2012-11-18T17:29:51.177 に答える