5.1.3 Для чего мы использовали MySQL?
На первых этапах развития MySQL его функциональные возможности
разрабатывались под потребности самого крупного из наших заказчиков. Это
делалось для обслуживания больших хранилищ данных для пары самых крупных
продавцов в Швеции.
По всем магазинам мы получаем еженедельный отчет по продажам по бонусным
карточкам, и обеспечиваем владельцам магазинов полезной информацией о том,
как рекламные компании влияют на их покупателей.
Объем этих данных весьма значителен (в сумме приблизительно 7 миллионов
транзакций в месяц), и, кроме того, мы должны предоставлять пользователям
данные за периоды от 4 до 10 лет. Каждую неделю мы получаем от клиентов
просьбы предоставить "мгновенный" доступ к новым отчетам на основе этих
данных.
Эта проблема была решена следующим образом. Мы сохраняем всю информацию за
месяц в сжатых таблицах "транзакций". У нас есть набор простых макросов
(сценарий), генерирующий итоговые таблицы, сгруппированные по различным
критериям (группа изделий, идентификатор заказчика, хранилище...) из
таблиц транзакций. Отчеты - это веб-страницы, динамически генерирующиеся
небольшим сценарием на Perl, который просматривает веб-страницу, выполняет
SQL-операторы, содержащиеся в ней и вставляет результаты. Для этих целей
можно было бы использовать PHP или модуль mod_perl
, но в то время этих
средств еще не существовало.
Для графических данных мы написали простой инструмент на C, который может
создавать GIF-файлы на основе результата SQL-запроса (определенным образом
обработав результат). Это также динамически выполняется из создаваемой
Perl'ом странички.
В большинстве случаев новый отчет может быть создан просто путем
копирования существующего сценария и модифицирования SQL-запроса в нем.
Иногда требуется дополнительно добавить поля в существующую итоговую
таблицу или сгенерировать новую таблицу, но это также делается очень
просто, поскольку у нас все транзакционные таблицы хранятся на диске (в
настоящее время у нас имеется меньшей мере 50Гб транзакционных таблиц и
200Гб других клиентских данных.)
Кроме того, мы обеспечиваем для наших клиентов возможность обращаться к
итоговым таблицам непосредственно через интерфейс ODBC; таким образом,
продвинутые пользователи могут самостоятельно экспериментировать с
данными.
У нас не было каких-либо проблем при обработке этих данных на весьма
скромном Sun Ultra SPARCstation (2x200 МГц). Недавно мы заменили один из
наших серверов на двухпроцессорный UltraSPARC с тактовой частотой 400 МГц
и теперь планируем начать обрабатывать транзакции на уровне продукта, что
будет означать десятикратное увеличение объема данных. Мы полагаем, что
сможем справиться с этим объемом лишь только добавлением соответствующего
количества дисков.
Помимо этого мы экспериментируем с Intel-Linux, чтобы получить больше
производительности по низшей цене. Теперь, имея бинарно-переносимый формат
базы данных (появившийся в версии 3.23), мы начнем использовать его для
некоторых частей приложения.
Наша интуиция подсказывает, что у Linux производительность значительно
выше при низкой и средней загрузке, а у Solaris - когда высокая загрузка
начнет возникать из-за критического дискового ввода-вывода. Но у нас нет
пока никаких выводов по этому поводу. После обсуждения с разработчиками
ядра Linux мы выяснили, что в это может быть побочным эффектом работы
ядра: когда Linux дает слишком много ресурсов пакетным заданиям, задачи
взаимодействия начинают замедляться. Из-за этого машина работает очень
медленно и не реагирует ни на что, пока обрабатываются большие пакеты.
Надеемся, что в последующих ядрах Linux этот вопрос найдет свое решение.