Большая таблица MySql слишком загружает сервер - PullRequest
7 голосов
/ 20 июня 2011

У меня есть таблица MySql, которая состоит из:

  1. ~ 25 миллионов строк (НАСТОЯЩЕЕ)
  2. 3 индекса
  3. Каждый день сканер добавляет ~ 3 миллиона строк
  4. В настоящее время я не смотрю слишком далеко, но окончательная оценка db может быть ~ CONST * e9 строк
  5. В настоящее время 9,5 гига
  6. innodb, и он читаетсяс момента вставки

Данные сами по себе состоят из текста ~ 100 символов + несколько полей с метаданными об этом.Индексами являются уникальный идентификатор, имя автора и идентификатор автора.

До сих пор все шло гладко, но теперь серверу трудно обрабатывать вставки новых данных (~ 10 секунд для каждой вставки, которая добавляет ~ 3 тыс. Строк).Я пытаюсь найти способы преодолеть эту проблему.Вещи, которые я считаю:

  1. Выполнение указателя при вставке требует усилий.Может быть, не делать этого во время вставки, и только после вставки X, добавляя индексы.
  2. Разделение данных на разные таблицы.
  3. Срезание в маленькую базу данных, и каждые X минут / дней, перемещение данных в большую базу данных.
  4. Перемещение в другую базу данныхдб.Я недостаточно знаком с NoSql, поможет ли мне решить эти проблемы?Это большое усилие, чтобы использовать его?

У каждого варианта есть свои подопции и дилеммы, но я думаю, что я должен сначала сосредоточиться на наличии направления.Какой маршрут мне выбрать и почему?Есть ли какая-то другая дорога, о которой я должен подумать?

Кстати - есть также возможность не сохранять все данные, а только те части, которые я действительно отображаю, но это сделает невозможным некоторые функциональные изменения впроцесс, через который проходят данные перед отображением.

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Если вы добавляете 3 000 000 строк в день, а 3000 строк занимают 10-секундную транзакцию, вы говорите о 1000 транзакциях в день, что должно занимать около 170 минут в день. Это действительно не так много.

Я думаю, что сначала попробую

  1. уменьшение количества ВСТАВКИ транзакции, вставив больше строк за транзакцию
  2. настройка сервера

Вы можете обнаружить, что вставка большего количества строк в транзакции на самом деле занимает меньше общего времени. А если нет, то это легко вернуть. Если сначала спрятать строки где-то еще, вы можете запускать транзакции INSERT во время низкой нагрузки.

Настройка сервера, вероятно, хорошая идея. Для справки см. Документацию MySQL по Параметры сервера настройки .

1 голос
/ 20 июня 2011

текущий двигатель оптимален для использования?

Вы согласились http://dev.mysql.com/doc/refman/5.1/en/partitioning-management.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...