«Таблица полностью нормализована» - поскольку существует такая вещь, как «чрезмерная нормализация», давайте посмотрим SHOW CREATE TABLE
для таблиц.
- Множество индексов по фактутаблица (таблица с 500M строками) снижает производительность
INSERT
. - Непрерывные значения (даты, дата-время, числа) должны не быть нормализованными.Нормализация причиняет боль много , когда вам нужно искать в диапазоне таких значений.
«Я узнал, что если запросы медленные, проблема исходит от любой вычислительной мощности,ОЗУ, диск или количество серверов. "- Это сказка старой жены.Обычно есть способы улучшить индексацию и / или формулировку запросов и / или схемы (как упомянуто выше).
Вы знакомы с «составными» индексами?
«Можете ли выРасскажите на детском языке, как облачные вычисления, балансировка нагрузки или добавление ОЗУ / ЦП / диска помогают увеличить время ответа на запрос с 7 до 1 секунды для такого большого количества строк? "Ответ: «Никто из них не поможет».MySQL выполняет один запрос в одном ЦП, и ввод-вывод на сервере также, вероятно, будет однопоточным.Параллелизма (на который вы ссылаетесь) не существует в MySQL;когда это произойдет, пользователь сам должен написать код, а потом оплакивать, что он не помог так сильно, как ожидалось.
"тогда лучше перенести эти данные в MongoDB или любую другую базу данных NoSQL" -- Вы упускаете суть.Если вам нужно прочитать 500M строк (или даже 1M), это займет время.Не существует волшебной пули для ускорения ввода-вывода.
Извините, что расплывчато, но существуют десятки принципов, которые могут значительно ускорить работу с 500M строк.
Большая помощь в хранилищах данных - «Сводные таблицы».Они часто делают вещи 10 раз так быстро.Но они требуют вас , чтобы построить и поддерживать их.(Опять же, я неясен из-за отсутствия подробностей о вашем случае использования.)
"для 99% случаев, которые попадают в стек через поток, это не так" - возможно, только 98%.
О единственном аппаратном исправлении, которое может увеличить скорость в 2 раза, является замена вращающегося диска на SSD.Процессоры значительно не улучшились за 18 лет.64 ядра помогает, когда у вас есть 64 соединения, но не когда вы определяете время ожидания 1 соединения.Разделение лучше всего делать, когда необходимые данные можно разделить на несколько серверов.