bash.im ithappens.me zadolba.li
8505

Базы — не игрушки

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

Проект состоял наполовину из несложных онлайн-игрушек и головоломок и поначалу жил себе на нашем сервере, никому не мешая. Спустя некоторое время нагрузка на сервер стала расти буквально не по дням, а по часам. Виновного нашли быстро, конкретную причину — ещё быстрей: достаточно было взглянуть на их MySQL-базу.

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

Созвонившись с «разработчиком» этого безобразия, я вежливо, как мог, объяснил суть проблемы и описал в общих чертах, что нужно делать. Сказать, что ответ сразил меня наповал — это сильно преуменьшить:

— Там не может быть проблем с производительностью, я всё тестировал на домашнем компе!

Я не стал расспрашивать, как он это делал, не стал и объяснять очевидных вещей. Знаю только, что проект доводили до ума (если доводили) уже где-то в другом месте.