Масштабирование базы данных MySQL и повышение производительности при увеличении количества запросов - PullRequest
0 голосов
/ 26 апреля 2020

У нас есть система, которая состоит из REST-приложения, построенного на Django. База данных, которую мы используем, MYSQL. Оба сервера находятся в AWS.

  • В настоящее время к нашему приложению приходят сотни запросов POST.
  • При каждом обращении мы выгружаем тело запроса в нашу базу данных.
  • Частота запросов огромна ( около 100 в минуту).

Наша следующая задача - обработать данные, которые мы получаем. В настоящее время у нас запланировано задание, которое выполняется каждые 1 минуту.

Это задание имеет логи c для извлечения данных из таблиц, которые еще не обработаны и на основе наших логи c оно обновляет другие таблицы в база данных. Одновременно выполняется большое количество запросов, которые выполняются. В часы пик, когда поступает слишком много данных, запросы блокируются, и наша система перегружается. Иногда нам приходится убивать запросы, чтобы освободить систему.

Каким образом мы можем сократить время обработки запросов, а также обеспечить выполнение всех запросов за меньшее время? Как мы можем гарантировать, что запросы не будут заблокированы?

1 Ответ

1 голос
/ 26 апреля 2020

Я предполагаю, что вы выбрали правильную базу данных в соответствии с вашими потребностями, и если mysql - это то, что вам нужно, есть несколько способов оптимизировать ее.

  1. Выберите правильный дб двигатель - кажется, ваша система слишком тяжелая для записи, поэтому выбрал какой-то движок, который работает с блокировкой на уровне строк, например, innodb.

  2. Индексирование - создайте правильные индексы для оптимизации чтения и обновления.

  3. Используйте арку ведущий-ведомый и направьте все считанные данные на ведомый и выполните запись на ведущий.

  4. И все же вы столкнулись с проблемой go для шардинга и распределения нагрузки на каждый шард, кроме шардинга mysql не предоставляет никакого другого решения для записи тяжелой системы.

  5. Если размер данных меньше, вы можете хранить все фрагменты в одном экземпляре и использовать ядра ЦП.

...