Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Есть БД относительно большого размера ( 4Гб и стремительно растет ). Под mysql выделена отдельно машина. На данный момент имеем 30 000 пользователей. Сервер с мускулом пока справляется нормально, но ожидается большой рост количества пользователей (больше 1000 000). Ясное дело что 1 машина с мускулом не справится с такой нагрузкой. Вопрос как "разнести" БД на 2-3 машины для балансировки нагрузки? В какую сторону мне смотреть? Кластеры, репликация или шардирование. Зарание благодарен за Ваши ответы!
Неактивен
Шардирование всегда надо планировать изначально, репликацию можно
делать уже по мере увеличения нагрузки.
Неактивен
Я так понимаю репликация даст только то, что можно будет перенаправить все запросы выборки на реплику? А что на счет кластеров?
Вся логика шардинга, я так понимаю, возлагается на само приложение? Допустим это реально оганизовать по user_id, но вопрос, что если в таблице с личными сообщениями 2 внешних ключа на таблицу с пользователями (отесть, два поля с user_id, кто отправил и кому) и при вставке записи окажется что эти пользователи находятся вообще на разных серверах? Как мне в этой ситуации может помочь мускул? Заранее спасибо!
Неактивен
Репликация даст возможность делать запросы на выборку данных с разных
серверов (но выбирать сервер должно клиентское приложение или какой-то
балансер).
Кластер — штука хорошая для отказоустойчивости, а вот в плане улучшения
производительности может быть обратный эффект. Кластер будет чрезвычайно
быстро работать на точечных запросах (назови имя пользователя с id = 17)
и будет сильно провисать на групповых (назови имена пользователей старше 40)
за счет необходимости передачи данных по сети.
Логика шардинга будет возлагаться на приложение. Внешние ключи, разуме-
ется, работать не будут — логика возлагается на приложение
Неактивен
cooler написал:
Допустим это реально оганизовать по user_id, но вопрос, что если в таблице с личными сообщениями 2 внешних ключа на таблицу с пользователями (отесть, два поля с user_id, кто отправил и кому) и при вставке записи окажется что эти пользователи находятся вообще на разных серверах? Как мне в этой ситуации может помочь мускул? Заранее спасибо!
мускуль к сожалению только субд, поэтому магии не обучен (
если шардить по user_id, а у вас в таблице есть кроме user_id еще и id пользователя, которому отправили запрос, ТО запрос с where user_id = N будет просто отправляться на определенный сервер(это я о шардинге), а вот запрос с where "id пользователя, которому отправили запрос" = M нужно будет отправить на все сервера, получить от них ответ и сделать merge(это я о mapreduce). если сообщения во всех серверах будут уникальные, то merge можно спокойно заменить на конкатенацию.
чтобы избежать возможных вопросов - повторюсь: шардинг и множество запросов со слиянием реализуются логически на уровне приложения. само слияние тоже на уровне приложения.
Неактивен