私は現在、10ノードのクラスタにmysqlに対してjavaプロジェクトを書いています。このプログラムは、データベースからいくつかの情報を取り出し、何らかの計算を行い、データをデータベースに戻します。ただし、表には何百万行もあります。ジョブを分割してクラスタアーキテクチャを利用する方法はありますか?別のノードでマルチスレッドを行う方法は?mysqlの速度アップ操作
答えて
私は、データベース・サーバー上のストアドプロシージャにその計算をやって考えると、中間層に数百万行をもたらすことを伝えたいです。あなたはワイヤー上にたくさんのバイトを保存します。計算の性質、スキーマ、索引付けなどによっては、マルチスレッドに頼らなくてもデータベースサーバーがその計算を実行できることがわかります。
私は間違っている可能性がありますが、見て試作する価値があります。
処理したいテーブル(A)に1,000万行があるとします。データベースにテーブルBを作成し、ノードによって処理された行のセットを格納します。したがって、Javaプログラムを最初に他のノードによって処理された最後の行をフェッチし、同じテーブルに追加して処理する行の範囲を他のノードに通知するような方法でJavaプログラムを書くことができます(これを決めることができます数)。ここでは、各ノードが一度に1000行を処理できると仮定します。ノード1はテーブルBを取り出し、それが空であると判断する。次に、ノード1は、Aの主キーが< = 1000(テーブルAの主キーが数字であり、昇順であると仮定する)までの処理であることを知らせる行( 'Node1'、1000)を挿入する。ノード2が来て、1000の主キーが他のノードによって処理されていることがわかります。したがって、1001から2000までの行を処理していることを他の人に知らせる行( 'Node2'、2000)を挿入します。テーブルBへのアクセスは同期している必要があります。
可能であれば、私は2つのテーブルを避けるでしょう、私はいくつかの追加のトラッキングフィールドを現在のテーブルにお勧めします。それが不可能な場合は、一時テーブルがあります。 – NeuroScr
あなたが唯一のMySQLサーバーを持っているので、あなたはアップデートのテーブルロックを減らすためにInnoDBエンジンを使用していることを確認してください。
また、もっと多くのクエリを実行する必要がある場合でも、クエリをできるだけシンプルに保つようにしています。これにより、クエリーキャッシュヒットの可能性が増し、バックエンドのすべての作業負荷が軽減され、クエリーの照合の一部がオフロードされ、フロントエンド(リソースが豊富)で作業が可能になります。行ロックが保持される時間も短縮され、競合が減少します。
提案されているGearmanソリューションは、おそらくこの仕事のための適切なツールです。バッチ処理をmysqlからクラスタに透過的に戻すことができます。
あなたがgearmanソリューションに比べて多くの仕事であるかもしれない各マシン上でMySQLが、設定した時間、メンテナンスおよびデータベースアクセス層への変更をシャーディングを設定することができます。また、複数のmysqlsを一度に使用できるようにする実験的なスパイダーエンジンを見たいかもしれません。
あなたの計算は非常に複雑である場合を除き、ほとんどの時間は、MySQLからデータを取得し、MySQLへ戻って結果を送信して過ごします。あなたは、単一のデータベースを持っていたよう
は、アプリケーション側での並列処理やクラスタリングのない量が大きな違いをしないでしょう。
これは可能な限り純粋なSQLで更新するか、ストアドプロシージャを使用してすべての処理がMySqlサーバー内で実行され、データの移動は不要です。
これで十分でない場合は、データベースを複数のMySqlインスタンスに分割し、いくつかのアプリケーションキーに基づいてデータを分割するスキーマを作成する必要があります。
- 1. 操作速度
- 2. MySQLクエリー速度の結合
- 3. MySQLの速度を選択
- 4. couchdbとmysqlの速度
- 5. タグとMySQL - 速度とユーザビリティ
- 6. アンドロイド高速ピクセルアクセスと操作
- 7. SDL2:高速ピクセル操作
- 8. NSOperationQueue操作の優先度
- 9. 速度のためのmysqlインデックス
- 10. 同じテーブルのLEFT JOINの速度 - Mysql
- 11. mysqlのクエリ速度最適化
- 12. 並べ替えアルゴリズムのシミュレーション中にスレッドの速度を操作する方法
- 13. インサートシーケンスのMySQLの操作
- 14. GeoDjango:GEOSのジオメトリ操作の高速化
- 15. 角度:$ uibModalでDOM操作
- 16. MySQL。整数データの操作
- 17. MySqlの文字列操作
- 18. IEnumerableの高速操作ですか?
- 19. MYSQLクエリ速度(検索クエリとクエリ)
- 20. ファイルアクセス速度とデータベースアクセス速度
- 21. JQueryの速度とJavaScriptの速度
- 22. バックグラウンド操作による高速リダイレクト
- 23. ナンシー高速条件インデックス操作
- 24. UPDATE操作を高速化する
- 25. 角度jsでのDOM操作のカスタムディレクティブ
- 26. トランジションアンドロイド・フラグメント・アップ・アップ
- 27. box2d加速度計の動作方法
- 28. openSSLの速度の精度
- 29. 速度(C#の)
- 30. 速度(SQLAlchemyの)
彼は1台のmysqlサーバしか持っていないように聞こえるので、クラスタを使用して問題を分散するのではなく、単一のリソースにボトルネックが生じます。 – NeuroScr