Table of Contents

На главную

Кластеризация БД

Репликация и share-nothing

Принцип работы репликации: есть несколько узлов, один из которых является главным. Запросы на выборку отправляются случайному серверу, запросы на изменение данных - главному, который автоматически дублирует их на вторичные сервера. Принцип работы архитектуры share-nothing отличается только тем, что нет явного главного сервера, запросы на запись могут идти любому, который потом распределяет их по всем остальным узлам.

Селекты распределяются по нескольким серверам.

Апдейты выполняются на всех серверах.

Возвращение упавшего master'а в строй - это целое приключение, требующее остановки базы (в случае репликации).

Добавление новых узлов требует остановки базы (в случае репликации) и копирования на него всех данных (в обоих случаях).

Узкое (и немасштабируемое) место - запись на диск.

Реализации: DB2 Enterprise,PGCluster, MySQL Cluster1), Sequoia.

Партишенинг

Принцип работы: данные делятся на куски, каждый из которых лежит на отдельном(ых) серверах.

При дроблении на достаточно мелкие куски можно до бесконечности (теоретически) разделять нагрузку на много серверов.

Добавление новых серверов требует ручной переразбивки данных, что требует остановки базы.

Высокая вероятность отключения отдельных частей данных в случае падения серверов, отвечающих за них.

Неравномерное распределение нагрузки.

Требуется постоянно пересматривать разделение для выравнивания нагрузки на отдельные сервера, что требует остановки базы.

Нетривиальная процедура дампинга.

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

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

Реализации: DB2 Enterprise, MySQL Cluster2), Sequoia3)

Shared-disk

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

Элементарное включение новых серверов, без остановки.

База целиком доступна пока работает хотя бы один сервер.

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

Реализации: Oracle Real Application Clusters.

Итого

Про PGCluster ничего не скажу, потому что почти ничего о нём не знаю. Аналогично с Sequoia, к тому же только для Java. MySQL Cluster, учитывая все его ограничения, совершенно неюзабелен. Остаётся DB2, но идея партишенинга порочна по сути, ну и Oracle, который в Standard Edition'е, начиная с которого оно поддерживает кластеризацию, стоит по $15K на процессор. Вот такая вот неутешительная ситуёвина.

Ссылки по теме

3)
Sequoia не умеет выполнять джойны с участием нескольких серверов.