Удаление данных из большой базы данных - PullRequest
2 голосов
/ 19 февраля 2011

Удаление из большой БД может быть распространенным вопросом, хотя я хочу спросить не о том, как это сделать.

  1. Из того, что я прочитал в Интернете, лучший / эффективный способ удаления из большой БД - это удаление небольших объемов данных через определенные промежутки времени. В моем случае я не могу выполнить TRUNCATE, так как данные постоянно записываются в БД, и я могу потерять их во время выполнения TRUNCATE, верно?

  2. При удалении данных из БД в небольших или больших количествах это создает издержки, которые могут снизить производительность. Я могу справиться с этим путем оптимизации таблицы после удаления. Что я не знаю, так это то, что оптимизация вызовет какие-либо проблемы с данными, прочитанными или записанными в БД в данный момент?

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

Ответы [ 3 ]

1 голос
/ 19 февраля 2011

Возможно, вам следует взять любую таблицу, из которой вы удаляете, и сделать следующее

Для этого примера таблица mytable

  1. CREATE TABLE newtable LIKE mytable;

  2. ALTER TABLE mytable RENAME oldtable;

  3. ALTER TABLE newtable RENAME mytable;

  4. TRUNCATE TABLE oldtable;

Таким образом, таблица становится доступной для записи новых данных, и вы можете тратить время на одновременное копирование старой таблицы.

0 голосов
/ 20 февраля 2011

Я не уверен, какие большие объемы данных вам нужно удалить. Но если это «старые» данные, которые вам нужно периодически удалять, вы можете использовать таблицы MERGE. Вы можете создать таблицу MERGE из любых таблиц MyISAM, имеющих одинаковую структуру.

Например, вы можете создать таблицу для каждого календарного квартала. В конце каждого квартала вы создаете новую пустую таблицу и заново объявляете таблицы, которые составляют таблицу MERGE. Таким образом, таблица MERGE всегда содержит данные прошлых лет. Если ваш код всегда ссылается на таблицу MERGE, вам не нужно ничего менять при «переносе» данных. Переопределение таблиц UNION таблицы MERGE происходит практически мгновенно.

Это всего лишь пример, но вы можете разделить ваши данные так, как вам нравится.

http://dev.mysql.com/doc/refman/5.0/en/merge-storage-engine.html

0 голосов
/ 19 февраля 2011
  1. MySQL не потеряет данные. Может произойти запрос / обновление данных, которые вы только что удалили, но клиент запросил более подробную информацию и т. Д. Иногда при больших удалениях или усечениях ваша база данных вместо этого будет прерывать вызовы от своих клиентов. Как клиенты реагируют на тайм-аут, зависит от них. В этом случае вам придется проверить, как клиенты обрабатывают эту ошибку.

  2. Любые «оптимизации» (о чем конкретно вы думали?) Должны происходить в непиковые часы. Измерьте активность вашей базы данных и определите, в какое время суток лучше проводить обслуживание (индексы, перестроение статистики) относительно шаблонов трафика пользователей. Рассмотрим формальное запланированное время простоя / отключения

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