我有一个要求,我必须为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);
有没有办法可以缓存数据并对其执行连接?(基本上在缓存上运行上述查询)
我应该为缓存使用什么? Aerospike,Redis,MongoDB等,
您能否基本了解我的包装类,它为此实现执行上述操作(1)
答案 0 :(得分:0)
您是否证明存在问题?根据你的说法,你遇到任何性能问题大约要30倍。您可以(可能)每秒执行100次,而不仅仅是3次更新,同时每秒执行数百次(不是0.33次)读取。
您需要将innodb_buffer_pool_size
设置为可用 ram的约70%。
鉴于所提供的索引,您提出的查询(使用JOIN
)应该没问题。
如果您遇到性能问题,则此处未显示任何证据。