Таблица автозагрузки MEMORY из другой таблицы MyISAM - PullRequest
0 голосов
/ 18 августа 2011

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 18 августа 2011

Я решил эту проблему следующим образом. 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

0 голосов
/ 20 апреля 2012

Похоже, вы также можете настроить 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

0 голосов
/ 18 августа 2011

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

...