У меня есть база данных MySQL с таблицей, заполненной примерно 1,5 миллионами строк данных, которые должны быть полностью обновлены каждые 5 минут. Данные больше не нужны, если они старше 5 минут.
Получение данных в таблицу не проблема... Я могу заполнить ее примерно через 50-70 секунд. Там, где у меня возникают проблемы, выясняется, как переносить все старые данные и заменять их новыми данными. Мне нужно иметь возможность запускать запросы в любое время по всему набору данных. Эти запросы должны выполняться очень быстро, и они должны содержать только данные из одного набора данных за раз (т.е. Запрос не должен вытягивать комбинацию новых и старых данных за 1 минуту, когда таблица обновляется).
У меня нет большого опыта работы с большими временными наборами данных, поэтому я был бы признателен за некоторые советы о том, как лучше всего решить эту проблему.
Создание разделов. Затем вы можете заполнить один раздел, а запрос пользователей - другим.
Чтобы сделать это вручную, вам просто нужно что-то вроде...
CREATE TABLE tbl0 (blah)
CREATE TABLE tbl1 (blah)
CREATE TABLE meta (combined_source INT)
INSERT INTO meta VALUES (0)
CREATE VIEW combined AS
SELECT * FROM tbl0 WHERE 0 = (SELECT combined_source FROM meta) % 2
UNION ALL
SELECT * FROM tbl1 WHERE 1 = (SELECT combined_source FROM meta) % 2
Теперь вы можете вставить новые данные в "неактивную" таблицу, и она НЕ появится в представлении.
Затем увеличьте значение в meta
. Сразу же представление переключается с отображения данных из одной таблицы для отображения данных из другой таблицы.
На следующей итерации вы просто проверяете meta
чтобы определить, какая таблица должна быть пустой, и загружать новые данные.
Одним из преимуществ этого подхода является то, что вам даже не нужно находиться в транзакции.