Автозагрузка таблицы MEMORY из другой таблицы MyISAM

Чтобы повысить производительность сервера, я решил использовать таблицу памяти для более быстрого чтения информации о пользователе.

Мой вопрос: как автоматически загрузить таблицу MEMORY из другой таблицы MyISAM после выключения сервера?

Я могу проверять количество строк каждый раз, когда хочу выполнить поиск в MEMORY, а затем загружать строку за строкой с помощью сценария PHP, но требуется время, чтобы прочитать 2000000 записей из MyISAM и сохранить в MEMORY. и проверка количества строк. хотя он не является потокобезопасным, и я должен об этом позаботиться.

Есть ли способ лучше?


person Shila    schedule 18.08.2011    source источник


Ответы (3)


Простейшим было бы изменить любой сценарий, запускающий MySQL (mysqld_safe?), И запустить mysql для выполнения команды для запуска сохраненной процедуры, которая заполняет вашу таблицу. Я не верю, что в MySQL есть что-то внутреннее, что вы можете запускать автоматически при запуске, или какой-либо внутренний планировщик заданий.

person Marc B    schedule 18.08.2011
comment
Спасибо, Марк, ты можешь объяснить на примере? - person Shila; 18.08.2011
comment
MySQL предлагает планировщик событий. См. Здесь: dev.mysql.com/doc /refman/5.6/en/ - person Code Commander; 20.04.2012

Я решил эту проблему следующим образом. 1. Создайте скрипт на php для cron. Черновая версия:

$connection = new PDO(....)
$sql = "Select id from table_memory limit 1";
$result = $connection->query($sql)->fetchColumn();
if (!$result) {
    $sql = "select * into outfile '/path' from main_table";
    $connection->exec($sql);
    if (file_exists('/path')) {
       $sql = "LOAD DATA INFILE '/path' INTO table_memory";
       $connection->exec($sql);
    }
}

// при необходимости окончательная проверка и отправка письма или другого уведомления

Ссылки: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

person Andrej Ludinovskov    schedule 18.08.2011

Похоже, вы также можете настроить MySQL для автоматического запуска определенных операторов при запуске, используя параметр init_file:

http://dev.mysql.com/doc/refman/5.6/en/server-options.html#option_mysqld_init-file

Вы можете сказать ему запустить файл, который заполняет вашу таблицу памяти.

Еще одно соображение, если вам нужно время от времени обновлять таблицу памяти, - это использовать события:

http://dev.mysql.com/doc/refman/5.6/en/create-event.html

person Code Commander    schedule 20.04.2012