MySQL的可查询缓存

时间:2016-05-17 19:03:22

标签: java mysql performance caching nosql

我有一个要求,我必须为MySQL数据库创建一个Cache-Layer。数据库非常庞大,其中包含大约100个表和数百万行。几乎所有表都有外键关系。 例如:

表:规则

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表分开。现在我想使用某种where条件从两个表中获取行,类似于:

Select * from rule r, params p where r.id = p.rule_id and r.id = (some_value);
  1. 有没有办法可以缓存数据并对其执行连接?(基本上在缓存上运行上述查询)

  2. 我应该为缓存使用什么? Aerospike,Redis,MongoDB等,

  3. 您能否基本了解我的包装类,它为此实现执行上述操作(1)

1 个答案:

答案 0 :(得分:0)

您是否证明存在问题?根据你的说法,你遇到任何性能问题大约要30倍。您可以(可能)每秒执行100次,而不仅仅是3次更新,同时每秒执行数百次(不是0.33次)读取。

您需要将innodb_buffer_pool_size设置为可用 ram的约70%。

鉴于所提供的索引,您提出的查询(使用JOIN)应该没问题。

如果您遇到性能问题,则此处未显示任何证据。