私は疎結合クラスターのいくつかのコードに取り組んでいます。ジョブ中に最適なパフォーマンスを達成するために、私は、子供が出入りするたびにクラスタにデータを再マップさせます。これは最終的にオプションになりますが、現在はデフォルトでデータのバランシングを実行します。私のバランスは基本的には、各子供がマシン1台あたりの平均ファイル数に1を加えた数を超えないようにすることです。除算がきれいでない場合は、残りの部分はプラスです。残りの部分はとなるので、常には子どもの数より少なくなるようにすることができますが、除外することができます。分散分布アルゴリズム
私のアルゴリズムはO(n!)です。子どものリストを見て、平均、剰余、あまりにも多く、少なすぎる人を見つけてください。あまりにも多くのリストの各子供のために、リストを通過し、あまりにも少ない各子供に送信してください。
もっと良い解決策がありますか?私はそこに存在しなければならないと感じる。
編集:
foreach (child in children) {
if (child.dataLoad > avg + 1) {
foreach (child2 in children) {
if (child != child2 && child2.dataLoad < avg) {
sendLoad(child, child2)
}
}
}
}
編集:O(N^2)ここで私はOを(!n)の導出方法を示すためにいくつかの擬似コードです。 Foreach n、n => n * n => n^2。私は今朝はコーヒーが足りないと思うよ! ;)
将来的には、より柔軟で弾力のある配分方法[重み付けとhueristics]に移行したいと思いますが、今のところデータの一様な配分が機能しています。
はforeachの(子供の子供) (child.dataLoad>平均場合:あなたが望むなら、あなたが調べることができますアーラン+ 1) foreach(子供の子供2) if(child!= child2 && child2.dataLoad