Schlagwort-Archiv: MySQL

Loadbalancing für MySQL (-Slaves)

Dieser Artikel im Blog eines Kollegen hat mich dazu veranlasst mir den verwendeten Algorithmus mal ein wenig näher anzusehen und zu überarbeiten – und ihn zumindest in Sachen Speicherbedarf zu verbessern. Heraus gekommen ist folgendes:

function getSlave($cluster)
{
        // gibt es nur einen Server im Array, wird dieser zurückgeliefert
        if(count($databaseClusters[$cluster]) == 1) {
                return "master";
        }
        else {
                $sum = 0;
                foreach($databaseClusters[$cluster] as $slave) {
                        $sum += $slave["prio"];
                }
                $randomVal = rand(0, $sum);
                if($randomVal < $sum / 2) {
                        $i = 0;
                        $tmpSum = 0;
                        while($tmpSum < $randomVal) {
                                  $tmpSum += $databaseClusters[$cluster]["slave$i"]["prio"];
                                  $i++;
                        }
                }
                else {
                        $i = count($databaseClusters[$cluster]);
                        $tmpSum = $sum;
                        while($tmpSum < $randomVal) {
                                $tmpSum -= $databaseClusters[$cluster]["slave$i"]["prio"];
                                $i--;
                        }
                }
 
                return "slave$i";
        }
}

Herausgekommen ist dadurch zwar eine längere aber im Allgemeinen speicherschonendere Methode um Datenbankqueries zu verteilen. Um weitere Informationen zu erhalten lest bitte bei meinem Kollegen weiter.

Nochmal zum Thema Tutorials

Wie ich bereits angekündigt hatte, schreibe ich derzeit an einem Tutorial. Leider bin ich bisher (wegen Zeitmangel) noch nicht dazu gekommen den ersten Teil fertig zu stellen – ich hoffe, dass mir das heute gelingen wird. Wenn ihr Wünsche/Vorschläge für Tutorial-Themen habt, schreibt mir diese bitte in den Kommentaren oder per Mail an stephan [at] straubel [dot] net. Die Themen, die ich bearbeiten kann, umfassen die Bereiche PHP, MySQL, JAVA, J2EE, JSF, Richfaces, Webseitenergonomie/Design, Barrierefreiheit und (X)HTML, CSS sowie JavaScript.