У нас есть база данных InnoDB, которая составляет около 70 ГБ, и мы ожидаем, что она увеличится до нескольких сотен ГБ в ближайшие 2–3 года. Около 60% данных принадлежат одной таблице. В настоящее время база данных работает достаточно хорошо, так как у нас есть сервер с 64 ГБ ОЗУ, поэтому почти вся база данных помещается в память, но нас беспокоит будущее, когда объем данных будет значительно больше. Прямо сейчас мы рассматриваем какой-то способ разделения таблиц (особенно тот, на который приходится большая часть данных), и сейчас я задаюсь вопросом, как лучше всего это сделать.
Варианты, которые мне известны в настоящее время:
- Использование MySQL Partitioning с версией 5.1
- Использование какой-либо сторонней библиотеки, которая инкапсулирует разделение данных (например, осколки гибернации)
- Реализация самостоятельно в нашем приложении
Наше приложение построено на J2EE и EJB 2.1 (надеюсь, мы когда-нибудь перейдем на EJB 3).
Что бы вы предложили?
РЕДАКТИРОВАТЬ (2011-02-11):
Просто обновление: в настоящее время размер базы данных составляет 380 ГБ, размер данных нашей «большой» таблицы составляет 220 ГБ, а размер ее индекса - 36 ГБ. Таким образом, хотя вся таблица больше не помещается в памяти, индекс делает это.
Система все еще работает нормально (все еще на том же оборудовании), и мы все еще думаем о разделении данных.
РЕДАКТИРОВАТЬ (2014-06-04):
Еще одно обновление: размер всей базы данных составляет 1,5 ТБ, размер нашей «большой» таблицы - 1,1 ТБ. Мы обновили наш сервер до 4-процессорного компьютера (Intel Xeon E7450) с 128 ГБ ОЗУ.
Система все еще работает нормально.
Далее мы планируем разместить нашу большую таблицу на отдельном сервере базы данных (мы уже внесли необходимые изменения в наше программное обеспечение), одновременно обновляя оборудование до 256 ГБ ОЗУ.
Эта установка должна длиться два года. Тогда нам придется либо наконец-то начать реализацию решения шардинга, либо просто купить серверы с 1 ТБ ОЗУ, что должно поддерживать нас в течение некоторого времени.
РЕДАКТИРОВАТЬ (2016-01-18):
С тех пор мы поместили нашу большую таблицу в ее собственную базу данных на отдельном сервере. В настоящее время размер этой базы данных составляет около 1,9 ТБ, а размер другой базы данных (со всеми таблицами, кроме «большой») составляет 1,1 ТБ.
Текущая настройка оборудования:
- HP ProLiant DL 580
- 4 x Intel (R) Xeon (R) CPU E7- 4830
- 256 ГБ ОЗУ
При такой настройке производительность в порядке.