обработка / сжатие больших наборов данных в нескольких таблицах - PullRequest
1 голос
/ 15 сентября 2011

В приложении нашей компании мы собираем статистические данные с наших серверов (загрузка, использование диска и т. Д.). Поскольку существует огромное количество данных, и нам не нужны все данные постоянно, у нас была процедура «сжатия», которая берет необработанные данные и вычисляет мин. Максимальное и среднее для ряда точек данных, сохраните эти новые значения в одной таблице и удалите старые через несколько недель.

Теперь передо мной стоит переписать эту подпрограмму сжатия, и новая подпрограмма должна хранить все несжатые данные, которые мы имеем в течение одного года, в одной таблице и «сжатые» данные в другой таблице. Сейчас меня больше всего беспокоит то, как обрабатывать данные, которые постоянно записываются в базу данных, и использовать ли «таблицу транзакций» (мой собственный термин, так как я не могу придумать лучшего, я не говорю о коммите / откат транзакции).

На данный момент наши сборщики данных вставляют всю информацию в таблицу с именем ovak_result, и сжатые данные заканчиваются в ovak_resultcompressed. Но есть ли какие-то конкретные преимущества или недостатки в создании таблицы с именем ovak_resultuncompressed и использовании ovak_result в качестве «временного хранилища»? ovak_result будет минимальным, что будет хорошо для процедуры сжатия, но мне нужно будет постоянно перетасовывать все данные из одной таблицы в другую, и в ovak_result.

будет происходить постоянное чтение, запись и удаление.

Есть ли в MySQL механизмы для обработки подобных вещей?

( Обратите внимание: Мы говорим здесь о довольно больших наборах данных (около 100 миллионов строк в несжатой таблице и около 1-10 миллионов строк в сжатой таблице). Кроме того, я могу сделать довольно много что мне нужно, как с программными, так и с аппаратными конфигурациями, так что если у вас есть какие-либо советы или идеи, касающиеся конфигурации MySQL или настройки оборудования, просто внесите их.)

1 Ответ

0 голосов
/ 15 сентября 2011

Попробуйте прочитать о ARCHIVE хранилище .


Повторное разъяснение.Хорошо, я не понял, что вы имели в виду из вашего описания.Читая более внимательно, я вижу, вы упомянули min, max и среднее.

Итак, вы хотите материализованное представление , которое обновляет агрегированные вычисления для большого набора данных,Некоторые бренды RDBMS, такие как Oracle, имеют эту функцию, но MySQL нет.

Один экспериментальный продукт, который пытается решить эту проблему, называется FlexViews (http://code.google.com/p/flexviews/). Это компаньон с открытым исходным кодом.инструмент для MySQL. Вы определяете запрос как представление для своего необработанного набора данных, а FlexViews постоянно отслеживает двоичные журналы MySQL и, когда он видит соответствующие изменения, обновляет только те строки в представлении, которые необходимо обновить.

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

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