3

管理者によって厳密に制御されている 1 つの mysql テーブルがあります。データ入力は非常に少ないですが、そのテーブルではクエリが高くなっています。テーブルの内容はあまり変わらないので、 PHP でmysql クエリ キャッシュを使用することを考えていましたが、(Google で調べたときに) と混乱しましたmemcached

  • memcachedとの基本的な違いは何mysqlnd_qcですか?
  • 以下の条件で私に最も適しているのはどれですか?
  • また、オートコンプリートボックスにも同じことを拡張するつもりですが、そのような場合に適していますか?

私のクエリは、ほとんどが非常に数バイトのデータの 30 行未満を返し、同じSELECTクエリを持ちます。私は単一のサーバーを使用しており、負荷分散は行われません。前もって感謝します。

4

3 に答える 3

2

クエリが常に同じである場合、つまりSELECT title, stock FROM books WHERE stock > 5、条件が変わらないstock > 6などの場合は、MySQL Query Cache を使用することをお勧めします。

Memcached はキー値ストアです。基本的にはキー=>値に変換できれば何でもキャッシュできます。キャッシュを実装する方法はたくさんあります。データベースから 30 行をクエリしてから行ごとにキャッシュすることもできますが、同じ行セットを何度も返す場合、ここでそれを行う理由はわかりません。memcached について考えられる最も基本的な例は次のとおりです。

// Run the query
$result = mysql_query($con, "SELECT title, stock FROM books WHERE stock > 5");

// Fetch result into one array
$rows = mysqli_fetch_all($result);

// Put the result into memcache.
$memcache_obj->add('my_books', serialize($rows), false, 30);

次に、 aを実行し$memcache_obj->get('my_books');てシリアル化を解除し、同じ結果を取得します。

しかし、同じクエリを何度も使用しているためです。MySQL にすべてのキャッシュを処理させることができるのに、なぜ複雑になるのでしょうか? memcached オプションを使用する場合は、結果が既にキャッシュにあるかどうか、またはデータベースでレコードが変更されているかどうかを確認するロジックを実装するだけでなく、memcached サーバーをセットアップする必要があることに注意してください。

この場合、memcached よりも MySQL クエリ キャッシュを使用することをお勧めします。

ただし、MySQL クエリ キャッシュで注意する必要があることの 1 つは、クエリがまったく同じである必要があり、余分な空白やコメントが一切含まれていないことです。これは、MySQL がキャッシュからクエリ文字列を比較するための解析をまったく行わないためです。クエリのどこかに余分な文字があると、別のクエリを意味します。

Peter Zaitsev は、 http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/でMySQL Query Cache について非常によく説明しています。Peter Zaitsev が述べたように、MySQL Query Cache がサポートしていないものは何も必要ないことを確認してください。

于 2013-11-10T11:12:29.743 に答える
2

クエリの実行速度が十分で、アプリケーションの速度がそれほど低下しない場合は、キャッシュしないでください。このように小さいテーブルでは、MySQL はそれを独自のキャッシュに保持します。アプリケーションとデータベースが同じサーバー上にある場合、メリットは非常に小さく、まったく測定できない場合もあります。

したがって、3 番目の質問については、基になるテーブルをクエリする方法にも依存します。ほとんどの場合、MySQL に内部的にキャッシュさせるだけで十分です。もう 1 つのアプローチは、可能なすべての組み合わせを生成して保存することです。そのため、mysql は一致する行を計算する必要がなく、正しい行をすぐに返します。

原則として、a) 結果セットの計算が複雑で時間がかかる場合、または b) ネットワーク経由でデータベースを呼び出すアプリケーション インスタンスが複数ある場合は、キャッシュを使用せずにアプリケーションを構築し、あまり変更されないものに対してのみキャッシュを追加します。このような場合、キャッシュを使用するとパフォーマンスが向上します。

また、Apache などの Web サーバーで PHP を実行する場合、プログラム内のキャッシュは現在のページのキャッシュしか使用しないため、あまりメリットがありません。複数の結果をキャッシュするには、外部キャッシュ (memcache など) が必要です。

于 2013-11-10T11:15:49.897 に答える
-1

memcached と mysqlnd_qc の基本的な違いは何ですか?

それらの間に共通点はまったくありません

以下の条件で私に最も適しているのはどれですか?

mysql クエリ キャッシュ

また、オートコンプリートボックスにも同じことを拡張するつもりですが、そのような場合に適していますか?

スフィンクス検索

于 2013-11-10T10:46:05.033 に答える