2

これは奇妙な質問だと思いますが、2 つのサーバーがあり、1 つは vps で、もう 1 つは mysql ホストです。今私の問題は、スタートアップの128mb vpsであるため、vpsの負荷を減らしたいということです。

わずかな問題です。MySQL サーバーをキャッシュのように機能させるには何が必要ですか。与えられたデータベースを保存して、MySQL サーバー上の何にもアクセスできません。

これには別のデータベースが必要ですか? 可能であれば、ホストに別のデータベースを追加するように依頼できます。

ありがとう!

4

1 に答える 1

2

MySQL をデータベースとして使用する VPS で Web サイトをホストする場合、典型的なリクエストは次のようになります。

  • クライアントは、VPS で実行されている Web サーバーにリクエストを送信します
  • Web サーバー内で実行されているスクリプトは、データベース クエリを作成します。
  • データベースはクエリ結果を返します
  • スクリプトは結果をフォーマットして出力します
  • 結果はブラウザ (クライアント) に表示されます

最初に Web サーバーを経由せずにリクエストをデータベースにヒットさせる方法はありません。

VPS の負荷を軽減したい場合は、スクリプトの実行を高速化できます。ほとんどの Web アプリケーションで最も時間がかかるのは、データベース クエリを実行して結果を待つことです。多くの場合、memcachedのようなメモリ内キャッシュを使用して VPS でデータベース クエリの結果をキャッシュすることで、これを回避できます。ただし、メモリ設定には注意してください。サーバーのメモリは非常に少ないため、最大割り当てメモリを十分に低い設定に設定してください。

以下は、SELECT クエリの結果をキャッシュする基本的な例です。

$cache = new Memcached();
$cache->addServer('localhost', 11211);

$article_key = "article[$article_id]";
$article = $cache->get($article_key);

if ($article === FALSE) {
    $statement = $conn->prepare("SELECT * FROM articles WHERE id = :id");
    $statement->exec(array('id' => $article_id));
    $result = $statement->fetchAll(PDO::FETCH_ASSOC);
    if (count($result) === 0) {
        // return a 404 status
    }
    $article = $result[0]; 
    $cache->set($article_key, $article);
}

// display the article
于 2012-11-17T02:43:36.203 に答える