Я понимаю, что это очень широко, поэтому позвольте мне дать вам настройки и быть конкретными в моих точках фокусировки.
Установка:
Я работаю с существующим PHP-приложением с использованием MYSQL. Таблицы почти все используют двигатель MYISAM и содержат по большей части миллионы строк. Одна из самых больших таблиц использует дизайн EAV, который необходим, но влияет на производительность. Приложение было написано для лучшего использования кэша MYSQL. Он запрашивает достаточное количество запросов на загрузку страницы (частично из-за этого) и достаточно сложно, чтобы пройти через большинство таблиц всей БД при каждой загрузке страницы.
Плюсы:
- бесплатно
- Таблицы MYISAM поддерживают полнотекстовые индексы, важные для приложения
Минусы:
- С учетом того, что все настроено, MYSQL ограничивается одним процессором для всего приложения. Если выполняется один очень требовательный запрос (или сервер находится под большой нагрузкой), он будет стоять в очереди со всеми остальными, делающими сайт невосприимчивым.
- Кэширование MYSQL и отсутствие "WITH" или "INTERSECT" означает, что мы должны разорвать наши запросы, чтобы лучше использовать кеш. Таким образом, умножается количество выполненных запросов. Например, использование подзапросов по нескольким таблицам с миллионами строк (даже при достойной индексации) оказывается большой проблемой при текущей/загружаемой нагрузке и ограничении, изложенном выше (использование ЦП)
Почувствовав необходимость масштабирования в предстоящий год, но не обязательно готов заплатить за лицензирование сразу, я думал о переписывании приложения и переключении DB.
Рассматриваются три варианта: либо продолжать использовать mysql, но и с движком INNODB, таким образом, мы можем использовать больше мощности процессора. Адаптироваться к Oracle XE и получить лицензию, когда нам нужно масштабировать вверх по 4Gb базе данных, 1Gb RAM или 1 CPU limit (все из которых мы еще не ударили). Или адаптироваться к PostgreSQL
Итак, вопросы:
- Как потерять полнотекстовое индексирование влияет на производительность в трех случаях (у oracle или postgreSQL есть эквивалент?)
- Как кеш-память оракула и postgreSQL используется для подзапросов, операторов WITH и UNION/INTERSECT.
- Как Oracle и PostgreSQL используют многоядерную/процессорную мощность (если/когда мы получаем лицензию oracle)
Я думаю, что уже много ответить, поэтому я остановлюсь здесь. Я не против простых/неполных ответов, если есть ссылки на комплимент.
Если вам нужна дополнительная информация, просто дайте мне знать
Спасибо заранее, ребята, помощь приветствуется.