Эту проблему довольно сложно описать, и поэтому трудно найти ответ. Я надеюсь, что какой-нибудь эксперт поделится с вами вашим мнением по этому поводу.
У меня есть таблица с около 1 миллиона записей. Структура таблицы примерно такая:
items{
uid (primary key, bigint, 15)
updated (indexed, int, 11)
enabled (indexed, tinyint, 1)
}
Сценарий такой. Я должен выбирать все записи каждый день и делать некоторую обработку. Обработка каждого предмета занимает около 3 секунд.
Я написал PHP-скрипт для выборки 200 элементов каждый раз, используя следующее.
select * from items where updated > unix_timestamp(now()) - 86400 and enabled = 1 limit 200;
Затем я обновлю поле «обновленные» выбранных элементов, чтобы убедиться, что оно не будет выбрано снова в течение одного дня. Выбранный запрос выглядит примерно так:
update items set updated = unix_timestamp(now()) where uid in (1,2,3,4,...);
Затем PHP продолжит работать и обрабатывать данные, которые больше не требуют подключения к MYSQL.
Поскольку у меня есть миллион записей, и каждая запись обрабатывается 3 секунды, это невозможно сделать последовательно. Поэтому я буду выполнять PHP каждые 10 секунд.
Однако с течением времени и ростом таблицы выбор становится намного медленнее. Иногда для запуска требуется более 100 секунд!
Ребята, у вас есть предложения, как мне решить эту проблему?