मैं कुछ ढीले युग्मित क्लस्टर के लिए कुछ कोड पर काम कर रहा हूं। नौकरियों के दौरान इष्टतम प्रदर्शन प्राप्त करने के लिए, जब भी कोई बच्चा प्रवेश करता है या बाहर निकलता है, तो क्लस्टर अपने डेटा को रीमेप करता है। यह अंततः वैकल्पिक बना दिया जाएगा, लेकिन अभी के लिए यह डिफ़ॉल्ट रूप से अपने डेटा संतुलन प्रदर्शन करता है। मेरा संतुलन मूल रूप से यह सुनिश्चित कर रहा है कि प्रत्येक बच्चे के पास प्रति मशीन फ़ाइलों की औसत संख्या से अधिक नहीं है, साथ ही एक। यदि विभाजन साफ़ नहीं है तो प्लस वन शेष के लिए है। और शेष के बाद से हमेशा बच्चों की संख्या की तुलना में कम हो जाएगा [0 मामले को छोड़कर, लेकिन हम उस बाहर कर सकते हैं], एक संतुलन के बाद बच्चों सबसे औसत पर होगा + 1.संतुलित वितरण एल्गोरिदम
सब कुछ ठीक लग रहा है जब तक मुझे एहसास हुआ मेरा एल्गोरिदम ओ (एन!) है। बच्चों की सूची नीचे जाएं, औसत, शेष खोजें, जिनके पास बहुत अधिक है और जिनके पास बहुत कम है। बहुत से सूची में प्रत्येक बच्चे के लिए, सूची के माध्यम से जाएं, प्रत्येक बच्चे को भेजें जो बहुत कम है।
क्या इसका कोई बेहतर समाधान है? मुझे लगता है कि वहां होना चाहिए।
संपादित करें: यहाँ दिखाने के लिए मैं कैसे हे प्राप्त कुछ psuedocode है (एन):
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)। Foreach n, n => n * n => n^2। मुझे लगता है कि आज सुबह मेरे पास पर्याप्त कॉफी नहीं थी! ;)
भविष्य में मैं एक अधिक लचीला और लचीला वितरण विधि [वजन और ह्यूरिस्टिक] में जाना चाहता हूं, लेकिन अभी के लिए, डेटा कार्यों का एक समान वितरण।
foreach (बच्चों में बच्चा) अगर (child.dataLoad> औसत + 1) foreach (बच्चों में बच्चे 2) अगर (बच्चे! = Child2 && child2.dataLoad