2010-11-21 5 views
1

Ich baue eine Web-Anwendung in PHP mit MySQL als Datenbank.Memcached Vorteile für kleine Datenbank mit vielen ausgewählten

Ich benutze Memcached, um Sitzungen zu speichern, und ich denke, wenn ich auch (Datenbankeinträge) in einem anderen Memcached-Instanz speichern sollte.

Die db wird ziemlich klein sein und von Zeit zu Zeit aktualisiert werden. Es wird jedoch viele Auswahlen geben, da wir hohen Traffic erwarten.

Für eine kleine Datenbank würde ich davon profitieren, wenn ich Datensätze in memcached speichere oder sollte ich es dem mysql Cache überlassen und die db für viele Verbindungen anpassen (würde mich über einige Hinweise zur Optimierung von mysql freuen)?

Danke

Antwort

0

Warum nicht Sie einige Benchmarks laufen und dann diese Last verbreiten !!

http://www.php.net/manual/en/intro.apc.php

Page generated in 0.003202 secs using 2 DB calls and 0 DBCache hits (users ttl=5 countries ttl=5 and both items have expired) 

Page generated in 0.002728 secs using 1 DB calls and 1 DBCache hits (users ttl=5 countries ttl=immortal and users has expired) 

Page generated in 0.000067 secs using 0 DB calls and 2 DBCache hits (users ttl=5 countries ttl=immortal and both are fetched from cache) 

how fast - 0.000067 ouch !! 

Beispiel PHP Script APC mit

<?php 

require_once "CacheDB.php"; 

ob_start(); 

echo "<h3>APC info:</h3>"; 

print_r(apc_sma_info()); 

try{ 

    //I assume you've already have a db connection available for the cacheDB to use 

    $db = @new mysqli("127.0.0.1","foo_dbo","pass","foo_db",3306); 

    if ($db->connect_errno) 
     throw new Exception("Could not connect: " . $db->connect_error); 

    //start the demo... 

    $startTime = microtime(true); 

    $cacheDB = new CacheDB($db); 

    $rows = $cacheDB->Query("call list_users()", CacheDB::TTL_5); //5 second Time To Live (TTL) (30 secs might be more realistic) 
    if($rows){ 
     echo "<h3>Users:</h3><ul>"; 
     foreach($rows as $row) echo sprintf("<li>%s</li>", $row["username"]); 
     echo "</ul>"; 
    } 

    $rows = $cacheDB->Query("call list_countries()", CacheDB::TTL_IMMORTAL); //never expires 

    if($rows){ 
     echo "<h3>Countries:</h3><ul>"; 
     foreach($rows as $row) echo sprintf("<li>%s</li>", $row["name"]); 
     echo "</ul>"; 
    } 

    echo sprintf("<p><b>Page generated in %s secs using %d DB calls and %d DBCache hits</b></p><p>Refresh me !!</p>", 
      number_format(microtime(true) - $startTime, 6, ".", ""), 
      $cacheDB->GetDBHits(), $cacheDB->GetCacheHits()); 

    $db->close(); 
} 
catch(Exception $ex) 
{ 
    ob_clean(); 
    echo sprintf("zomg borked - %s", $ex->getMessage()); 
} 

//finally 

ob_end_flush(); 

?> 
+0

memcache Unterstützung Vertrieb - http://stackoverflow.com/questions/815041/memcached-vs-apc-which-one -should-ich-wähle – ajreal

+0

so wahr, aber es kommt zu einem Preis http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ (Ich weiß nicht über dich, aber ich bin eine Geschwindigkeit Freak und so was, wenn ich über meine Last ausbalancierte Webserver duplizieren) –

+0

Hängt davon ab, wie Sie es sehen, Daten/Code, der bei APC zwischengespeichert wird, nur verfügbar für Server, die den APC ausführen. Wenn Sie Memcache verwenden, führen Sie es einmal aus, speichern Sie die Werte und verwenden Sie sie erneut auf mehreren Servern – ajreal

Verwandte Themen