2

私は非常に具体的な最適化の問題に直面しています。

現在、4 つの正規化されたデータ テーブルがあります。

毎秒、おそらく数千のユーザーが、AJAX を使用してこれらのテーブルから最新情報を取得します。

問題は、彼らが必要とするデータのサブセットを比較的簡単に予測できることです...それらの4つの正規化されたテーブルの最新の100程度のエントリ。

私は非正規化を研究してきました...しかし、おそらくもっと簡単な解決策があると感じています。

私はどういうわけか毎秒1つのSQLクエリを実行して必要な情報を要約し、それを一時キャッシュテーブルに保存してから、すべてのユーザークエリをこれから引き出すことができると考えていました. これにより、4 つのテーブルの複雑な結合を 1 回だけ実行できるようになり、そこからユーザーはキャッシュされたテーブルから単純なルックアップを実行するだけで済みます。

これが実現可能かどうかは本当にわかりません。これまたは他の提案に関するコメントは大歓迎です。

ありがとう!

4

4 に答える 4

4

memcacheを使用できますか?

データベースの負荷を軽減するのに役立ちます。

于 2010-03-31T16:32:36.247 に答える
3

MySQL バージョン 5.1.6 以降を実行している場合は、Eventsを利用できます。

CREATE EVENT e                 
ON SCHEDULE
EVERY 1 MINUTE                 
DO
INSERT INTO tempTable (`col1`,`col2`,`col3`) 
    SELECT `col1`,`col2`,`col3`
    FROM table1
    WHERE col1 = "value"   
于 2010-03-31T16:36:32.990 に答える
2

クエリキャッシュを試しましたか?

Select SQL_CACHE * from myTable  inner join etc..... ;

データが頻繁に変更される場合、これはあまり役に立たない可能性があります。(キャッシュは、データが変更されるたびに自動的に無効になります。)

注:データベースの外部でキャッシュを試すことができる場合は、常にデータベースを保護してください。SHOW VARIABLES LIKE %query_cache%また、変数をチェックして、クエリ キャッシュがオンになっていることを確認する必要がある場合もあります。

于 2010-03-31T16:50:24.910 に答える
1

非正規化は の結果であってはなりませんthinking。しかし、テストの。 問題クエリとは あなたがいずれかを持っている?

他の機器 (ハードウェア、Web サーバー、ビジネス ロジック層) は、そのようなトラフィックに対応できますか? それともあなたの質問はただの想像ですか?

于 2010-03-31T16:42:00.513 に答える