Кластеризация, разделение или простой раздел / репликация - PullRequest
10 голосов
/ 04 января 2011

Мне нужно несколько советов от вас, экспертов по этому вопросу.Дело в том, что мы создали приложение Facebook несколько дней назад, и, к счастью, оно получило много вирусов, проблема в том, что наша база данных стала ПО-НАСТОЯЩЕМУ ПОЛНОЙ (в некоторых таблицах сейчас более 25 миллионов строк), и дошло до того, чтоприложение просто перестало работать, потому что была очередь из тысяч и тысяч записей.

Мне нужно БЫСТРО внедрить решение для масштабирования этого приложения, но я не уверен, стоит ли мне использовать Sharding или Clusteringтак как я не уверен, каковы плюсы и минусы каждого из них, и я думал о подходе Разделения / Репликации, но я думаю, что это не поможет, если нагрузка на записи?

Ответы [ 4 ]

0 голосов
/ 05 июня 2017

Clustering / Sharding / Partitioning происходит, когда отдельный узел достиг точки, где его оборудование не может нести нагрузку. Но вашему оборудованию еще есть куда расширяться. Это первый урок, который я усвоил, когда меня начали беспокоить такие проблемы

0 голосов
/ 04 января 2011

25 миллионов строк - вполне разумный размер для хорошо построенной реляционной базы данных. Однако следует иметь в виду, что чем больше у вас индексов (и чем они полнее), тем медленнее будет запись. Индексы предназначены для повышения производительности запросов за счет скорости записи. Убедитесь, что вы не более -индексированы.

Какое оборудование используется для этой базы данных? Достаточно ли у вас оперативной памяти? Изменить эти атрибуты гораздо проще, чем попытаться реализовать сложные методы балансировки нагрузки СУБД, особенно если вы находитесь в затруднительном положении.

0 голосов
/ 11 сентября 2011

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

Что ж, 8 ГБ ОЗУ все еще не так много, вы можете иметь много сотен ГБ ОЗУ с довольно большим пространством на жестком диске, и MySQL все равно будет работать для вас.

Кластеризация / разделение / разбиение происходит, когда один узел достиг точки, когда его оборудование не может нести нагрузку. Но вашему оборудованию еще есть куда расширяться.

Если вы не хотите обновлять свое оборудование, вам нужно предоставить больше информации о дизайне базы данных, и если есть много объединений или нет, чтобы вышеперечисленные опции могли быть глубоко рассмотрены.

0 голосов
/ 04 января 2011

Ну, чтобы понять это, вам нужно понять, как MySQL обрабатывает кластеризацию.Есть 2 основных способа сделать это.Вы можете выполнить репликацию Master-Master или кластеризацию NDB (сетевая база данных).

Репликация Master-Master не поможет с нагрузками записи, поскольку оба мастера должны воспроизводить каждую выполненную запись (так что выничего не получаю).

Кластеризация NDB будет работать очень хорошо для вас тогда и только тогда, когда вы будете выполнять в основном поиск по первичному ключу (поскольку только при поиске с помощью PK NDB может работать более эффективно, чем обычные настройки мастер-мастер).Все данные автоматически распределяются между многими серверами.Как я уже сказал, я рассмотрел бы это, только если подавляющее большинство ваших запросов - не что иное, как поиск по ПК.


Так что остается еще два варианта.Sharding и удаление от MySQL.

Sharding - хороший вариант для решения подобной ситуации.Однако, чтобы использовать все преимущества шардинга, приложение должно быть полностью осведомлено об этом.Таким образом, вам нужно будет вернуться и переписать весь код доступа к базе данных, чтобы выбрать подходящий сервер для общения для каждого запроса.И в зависимости от того, как настроена ваша система в настоящее время, может оказаться невозможным эффективное разбиение ...

Но другой вариант, который, я думаю, может лучше всего удовлетворить ваши потребности, это переключение с MySQL.Так как вам все равно потребуется переписать код доступа к БД, переключение на базу данных NoSQL не должно быть слишком сложным (опять же, в зависимости от вашей текущей настройки).Существует множество серверов NoSQL, но мне нравится MongoDB .Он должен быть в состоянии противостоять вашей нагрузке записи без беспокойства.Просто знайте, что вам действительно нужен 64-битный сервер, чтобы использовать его правильно (с вашим объемом данных).

...