2010-11-21 11 views
1

私はデータベースとしてmysqlを使ってPHPでWebアプリケーションを構築しています。たくさんの選択肢を持つ小さなデータベースのMemcachedメリット

セッションを保存するためにmemcachedを使用しています。別のmemcachedインスタンスにもデータベースレコードを保存する必要があると考えています。

dbはかなり小さくなり、しばらくの間更新されます。しかし、トラフィックが多いと予想されるので、多くの選択肢があります。

memcachedにレコードを保存するとメリットがありますか、またはmysqlキャッシュに残して、たくさんの接続(データベースをmysqlを最適化するためのポインタに感謝します)を調整する必要がありますか?

おかげ

答えて

0

は、なぜあなたは、いくつかのベンチマークを実行し、その負荷を分散いけません! APCを使用して

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 !! 

サンプルPHPスクリプト

<?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のサポート分布 - http://stackoverflow.com/questions/815041/memcached-vs-apc-which-one -should-i- – ajreal

+0

を選択してください。しかし、それは費用がかかりますhttp://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/(私はあなたについて知っていませんが、私はスピードです私のロードバランシングされたWebサーバー上で複製する場合はどうすればいいですか) –

+0

APCでキャッシュされたデータ/コードは、どのように表示されるかによって異なりますが、APCを実行するサーバーでのみ使用できます。 memcacheを使用している間、一度実行し、値を保存し、複数のサーバーに再利用 – ajreal

関連する問題