#mysql #database #database-design #database-schema
#mysql #База данных #проектирование базы данных #база данных-схема
Вопрос:
Это звучит безумно, но я начал проект с интенсивным использованием данных [сбор запасов в интернет-магазине], который позже вырос до очень больших размеров. В настоящее время у меня около 2000 пользователей, и у каждого пользователя около 100 таблиц. Итак, по сути, я создал систему так, чтобы у каждого пользователя была своя база данных mysql, и разместил ее на выделенном сервере. Проблема в том, что сервер становится очень медленным и ломается из-за давления и подключений. Есть ли инструмент, который я могу использовать для оптимизации БД? или я должен перепроектировать только 1 базу данных, что будет означать перепроектирование всей системы? Мне нужен совет и помощь
Комментарии:
1. Посмотрите на настройки подключения каждого сервера. Он должен обрабатывать 2000 пользователей. 2000 пользователей используют его одновременно?
2. Также мы не можем дать вам никаких значимых советов, не зная, что вы пытаетесь сделать 🙂
3. @Peter Minchev: что насчет этого? где я могу это увидеть на сервере mysql?
4. Происходит ли сбой из-за подключений или из-за того, что ваши запросы выполняются вечно, потому что у вас 200000 таблиц?
5. Очевидно, что 4000 баз данных — это примерно на 3999 больше, чем нужно обычному приложению. Я бы выбрал «редизайн», потому что рано или поздно он выйдет из-под контроля. В то же время, вы могли бы попробовать оптимизировать свои запросы, чтобы посмотреть, сможете ли вы сэкономить на драгоценных циклах процессора.
Ответ №1:
4000 баз данных для одной системы ?! Ваузер, ты изобрел Google?
Я бы определенно сказал, что вам нужно изменить эту настройку — если, конечно, ваша «система» на самом деле не является хостингом базы данных, и каждый пользователь заплатил за частную БД.
Нет ничего плохого в том, чтобы иметь несколько отдельных баз данных, но 2 на пользователя — неправильный подход.
«Правильный» подход будет полностью зависеть от того, для чего предназначена ваша система.
Вы упомянули, что у каждого также есть выделенный сервер — это должно предотвратить проблемы с конфликтом для других пользователей. Вы уверены, что это не виртуальный хостинг?
Комментарии:
1. У меня есть выделенный сервер [2 ГБ оперативной памяти]. и на этом сервере у меня есть эти базы данных.
2. @karto: хорошо, есть проблема — 4000 баз данных на сервере с 2 ГБ оперативной памяти будут работать медленно, независимо от дизайна. В моем ноутбуке было 2 ГБ, и он изо всех сил пытался запустить экземпляр SQL Server для разработчиков.
3. Спасибо widor: должен ли я увеличить объем оперативной памяти примерно до 16 ГБ? почему я пытаюсь перепроектировать?
4. Оперативная память дешевая, и это, безусловно, помогло бы решить проблему с подключениями / конфликтами, но реальной проблемой здесь является дизайн базы (баз) данных — вам все еще может понадобиться много, или, возможно, вы можете реорганизовать настройку в одну или две. Использование большего объема оперативной памяти — это лишь временное решение.
5. : Я могу перепроектировать базу данных примерно до 15. Тогда это означает, что для моих 4000 пользователей они будут подключаться / повторно подключаться к 15 базам данных. таким образом, получается 4000 * 15 подключений, если все они вошли в систему. Если я буду поддерживать 4000 dbs, это будет 4000 * 1 соединений. есть смысл в том, что я говорю??
Ответ №2:
В девяти случаях из десяти, когда кто-то структурирует базу данных приложения таким образом (сегментируя идентичные данные в разные базы данных или даже в разные таблицы), это ошибка, основанная на ненужной попытке предварительной оптимизации системы.
Но без дополнительной информации мы не можем сказать, действительно ли:
-
Это один из девяти случаев, когда это ошибка, или десятый раз, когда это подходящий дизайн.
-
Является ли количество подключений причиной проблем с производительностью, которые вы видите (которые можно было бы решить путем переключения на единую базу данных) или что-то еще.
Комментарии:
1. : Речь идет о сборе определенных данных для пользователей и их хранении. Собранные данные являются интенсивными по объему.
2. Я могу перепроектировать базу данных примерно до 15. Тогда это означает, что для моих 4000 пользователей они будут подключаться / повторно подключаться к 15 базам данных. таким образом, получается 4000 * 15 подключений, если все они вошли в систему. Если я буду поддерживать 4000 dbs, это будет 4000 * 1 соединений. есть смысл в том, что я говорю??