У меня есть требование, когда мне нужно создать базу данных Cache-Layer for MySQL. База данных огромна, и в ней насчитывается около 100 таблиц и миллионов строк. Почти все таблицы имеют отношения с внешним ключом. Например:Queriable Cache для 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);
Есть ли способ, где я могу кэшировать данные, а также выполняет присоединяется на ней (в основном работает? приведенный выше запрос в кеше)
Что я должен использовать для кеширования для этого? Aerospike, Redis, MongoDB и т.д.,
Можете ли вы дать общее представление моего класса-оболочки, который выполняет описанную выше операцию (1) для реализации этого
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
@ MichałSznurawa Проблема в том, что получаемые данные большие (около 30 Мб), а используемые таблицы обновляются очень часто (около 3 обновлений/сек), поэтому невозможно использовать встроенный кеш –
вы можете написать что-то больше о том, как используются данные? Как часто читается, и если вам нужно получить самую свежую копию? – michaJlS