Назад | Перейти на главную страницу

MySQL - лучший движок (ы) для 2 таблиц - одна выполняет тяжелые обновления, другая ведет журнал за 15 минут.

У меня есть система, в которой пользователи часто отправляют работу на мой сервер. При 1500 активных одновременно, это примерно 6000 единиц работы, отправляемых в минуту. Я использовал одну большую таблицу, чтобы суммировать работу, а затем, когда решение запускается, база данных очищает старую работу, чтобы размер оставался управляемым.

Моя цель - разделить таблицу на две части: счетчик работы и 15-минутный журнал.

Таблица счетчика работ будет запускать ОБНОВЛЕНИЕ при каждой отправке работы (первичный ключ - worker_id, solution_id), увеличивая третий столбец на 1 при каждой отправке работы. Все команды обновления будут использовать worker_id и solution_id в качестве предложения WHERE, поэтому всегда будет попадать в пару первичных ключей.

Таблица журнала будет хранить 3 столбца: worker_id (INT), submit_time (timestamp), valid (ENUM ('Y', 'N')). Каждую минуту таблица будет получать запрос, который удаляет информацию старше 15 минут.

Мой текущий план использует InnoDB для таблицы счетчиков и таблицу MEMORY для журнала. Будет ли это правильный выбор двигателей для каждой таблицы? Журнал временных меток не важен, поэтому, если таблица будет потеряна из-за перезапуска, это не будет проблемой.

Вы правы, используя InnoDB для таблицы счетчиков, поскольку в нее будет много записей, поэтому потребуется механизм блокировки строк InnoDB.,

И поскольку у вас нет проблем с потерей данных при перезапуске сервера, то механизм памяти - хороший выбор. но вы должны учитывать, насколько большой станет ваша таблица памяти. согласно руководству MySQL:

Максимальный размер таблиц MEMORY ограничен системной переменной max_heap_table_size, значение по умолчанию которой составляет 16 МБ. Чтобы иметь большие (или меньшие) таблицы MEMORY, вы должны изменить значение этой переменной. Действующее значение для CREATE TABLE - это значение, используемое для жизни таблицы. (Если вы используете ALTER TABLE или TRUNCATE TABLE, значение, действующее на тот момент, становится новым максимальным размером для таблицы. Перезапуск сервера также устанавливает максимальный размер существующих таблиц MEMORY равным глобальному значению max_heap_table_size.) Вы можете установить размер для отдельных таблиц, как описано далее в этом разделе.