Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте,
Хочу попросить помощи, совета у Гуру MySql
Я написал парсер большого источника данных.
Источник парсится каждую минуту.
Парсинг выполняется в 9 потоков.
Результаты записываются в одну сводную таблицу.
Таблица MyIsam
Новые записи вставляются.
Существующие записи обновляются.
В сутки добавляется около 200 тыс. записей.
За 3 дня таблица разрастается до около 700 тыс. записей
Устаревшие записи (старше 3-х дней) переписываются в таблицу с историческими данными
(для каждого дня отдельная таблица).
Затем Устаревшие записи удаляются.
Сохранение и удаление Устаревших записей производится по 200 записей каждую минуту.
У меня периодически (примерно через неделю работы) ломается сводная таблица в базе данных.
Как мне кажется это из-за удаления Устаревших записей.
Я думаю что я почти все сделал неправильно
Вопрос: Что делать ?
У меня такие варианты решения:
1) Разбить таблицу на несколько по суткам, по часам и использовать MERGE
2) Использование партиций
3) Попытаться избавиться от UPDATE (использовать только INSERT)
4) Использовать InnoDB
5) Использовать memcached
Как Вы думаете какой самый правильный вариант ?
Или какой вариант принесет наибольший выиграш ?
Спасибо.
Неактивен
Первым я бы попробовал перейти на Innodb и, если только проблема сохранится, попробовал бы другие пути.
Неактивен
rgbeast написал:
Первым я бы попробовал перейти на Innodb и, если только проблема сохранится, попробовал бы другие пути.
Если честно, то у меня нет опыта работы с Innodb.
На сколько много надо буде переписывать запросы ?
Я думал разбить таблицы и использовать MERGE.
Так же думал попробовать таблицу с устаревшими данными переименовывать в таблицу с историческими данными.
А для MERGE создавать новую таблицу.
Или я не прав ?
Неактивен
А ломается — это как? Бьются ключи? Бьются данные? Что при этом происходит с сервером?
Есть ощущение, что Вы пытаетесь лечить следствие, а не причину.
Я бы начал с того, что разобрался бы, почему, собственно, ломается таблица. Это починит проблему.
Тем не менее, рекомендация Григория про InnoDB — в силе. 200 изменений в минуту — это 3 изменения
в секунду, точно хороший повод попробовать InnoDB.
Про объединение — над InnoDB можно сделать VIEW с UNION выборки из нескольких таблиц. Ну или
честный PARTITION.
Неактивен
Всем спасибо, кто принял участие в обсуждении.
Думаю рекомендации по поводу InnoDB правильные,
но я хотел отложить это на потом, что бы понять эффект от перехода на InnoDB
Но пока работает как описано ниже.
Для сводной таблицы сделал партицирование
Плюс
Сделал семь таблиц для каждого дня недели.
Данные пишу параллельно в общую сводную таблицу и в таблицу для дня недели.
Для общей сводной таблицы удаляю устаревшие партиции (TURNICATE)
Таблицы для дня недели переименовываю в исторические таблицы и создаю новые таблицы для соответствующего дня недели.
Работает уже несколько дней.
Все нормально.
Для информации алгоритм с удалением по 200 записей выполнялся около 5 сек.
Переименовывание таблиц и удаление устаревших партиций - выполняется доли секунды.
---
В планах попробовать сделать так.
Писать только в таблицы для дня недели и раз в пять минут собирать из них общую сводную таблицу.
Плюсы:
Работа с небольшими отельными таблицами.
Для общей сводной таблицы будут только операции по чтению
Не знаю насколько быстро будет раз в пять минут собирать общую сводную таблицу размером в 1.1 Гига
Неактивен
Страниц: 1