Что происходит, когда в БД накапливается более 100+млн записей?

229
04 ноября 2017, 13:05

Всем привет. Стало интересно, а что происходит, когда в БД (MySQL) накапливается более 100+млн записей? Они как-либо архивируются/как происходит общение с базой? Или весь вопрос в покупке более мощных серверов?

Answer 1

Стало интересно, а что происходит, когда в БД (MySQL) накапливается более 100+млн записей?

Это называется HighLoad и распределение нагрузки. Если брать саму суть вашего вопроса, то для сокращения времени обращения к данным (при очень большом их количестве) большие таблицы разделяются на несколько частей (шардов, сам процесс называется шардинг).

Далее реализуется логика обращения к этим шардам, т.к. держать ее в самом коде приложения не лучшее решение. Например, в VK это реализовано в виде сервисов. К нужному сервису пишется REST-запрос, сервис выполняет поиск данных по шардам и выдает результат в ответе.

Также имеет смысл использовать NoSQL-решения или распределенные базы данных (например, Cassandra от Facebook), но конкретная реализация сильно зависит от самих данных. Плюс не забываем про репликацию, бэкапы и отказоустойчивость.

Если же у вас всего один сервер и в него не влезает база, либо не справляется с нагрузкой, то:

  1. Для начала вынесите БД на отдельный сервер с большим количеством оперативной памяти.
  2. Если этого недостаточно, то имеет смысл отделить наиболее нагруженные таблицы и выносить их на отдельные сервера. Также можно попробовать разбить большие таблицы на несколько частей по типам данных (данные, которые запрашиваются редко и по ним не идет никакого поиска и сортировки - переносим в отдельные таблицы).
  3. Снизить нагрузку на базу поможет кэширование данных. Используйте тот же Memcached. Даже один правильно настроенный кэшируюший сервер способен уменьшить нагрузку на базу в разы (конечно, при условии, что используется кэширование подходящих запросов, которые часто запрашиваются и не слишком быстро вымываются из кэша).
  4. Шардинг для небольших проектов - это крайняя мера, обычно к ней прибегают, когда уже физически невозможно хранить или проводить операции над одной таблицей. Имейте ввиду, что это на порядок усложняет логику обращения к базе.
READ ALSO
Как можно хранить/описывать объекты

Как можно хранить/описывать объекты

Стоит задача написать некую среду для моделированияВ ней пользователю предложены какие-то готовые модельки и алгоритмы

268
Помогите придумать парсер [дубликат]

Помогите придумать парсер [дубликат]

На данный вопрос уже ответили:

294
java проблема с double

java проблема с double

Уважаемые хелп!!! Задача у меня была следующая, написать деление двух int , результат double , потом в этом double анализируя 12 знаков после запятой...

300