2016-05-17 12 views
1

私は、MySQLデータベースのキャッシュ層を作成する必要があります。データベースはおよそ100のテーブルと数百万の行で膨大です。ほとんどすべてのテーブルには、外部キーの関係があります。たとえば :MySQL用クエリ可能キャッシュ

表:ルール

CREATE TABLE `rule` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `code` varchar(256) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `idx_rule_code` (`code`) 
) 

表:paramsが

CREATE TABLE `params` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `rule_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `rule_id` (`rule_id`), 
    CONSTRAINT `params_ibfk_1` FOREIGN KEY (`rule_id`) REFERENCES `rule` (`id`) 
) 

私は別に のparamsテーブルについても同様にキーとルールテーブルの行を格納するとすることができますよ。今、私はこれに似たところの条件のいくつかの並べ替え、使用して両方のテーブルから行を取得したい:

Select * from rule r, params p where r.id = p.rule_id and r.id = (some_value); 
  1. 私がデータをキャッシュすることができます方法はありますし、また、それに参加する実行(基本的に実行しています?上記のキャッシュに関するクエリ)

  2. これをキャッシュするにはどうすればよいですか?エアロ、Redisの、MongoDBのなど、

  3. あなたは、この実装

+0

MySQLにはキャッシュが内蔵されているため、調整することから始める方が妥当でしょうか? https://www.percona.com/blog/2015/01/02/the-mysql-query-cache-how-it-works-and-workload-impacts-both-good-and-bad/ http:///dev.mysql.com/doc/refman/5.7/en/query-cache-configuration.html – michaJlS

+0

@MichałSznurawa問題は、フェッチされるデータが大きく(約30Mb)、使用されているテーブルが頻繁に更新されることです約3回の更新/秒)、組み込みキャッシュを使用できないようにする –

+0

データの使用方法についてもっと詳しく書くことができますか?どのくらいの頻度で読み込みが行われ、常に新鮮なコピーを取得する必要がある場合は、 – michaJlS

答えて

0

のためにあなたは問題があることを証明した(1)上記の操作を実行し、私のラッパークラスの基本的なアイデアを与えることはできますか?あなたが言ったことに基づいて、あなたはパフォーマンスの問題を抱えることから約30倍です。 1秒あたりの更新数は3回だけではなく、100回(おそらく)行うことができます。同時に、毎秒数百回(0.33回ではない)の読み取りも実行できます。

innodb_buffer_pool_sizeは、利用可能なの約70%に設定する必要があります。

あなたが提示したクエリ(JOIN)は、提供されたインデックスを考慮すれば問題ありません。

パフォーマンスに問題がある場合は、ここに証拠は表示されていません。

関連する問題