User Tools

Site Tools


db_clustering

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

db_clustering [2007/12/24 13:54]
db_clustering [2019/06/12 16:08] (current)
Line 1: Line 1:
 +[[start|На главную]]
 +====== Кластеризация БД ======
  
 +===== Репликация и share-nothing =====
 +Принцип работы репликации:​ есть несколько узлов, один из которых является главным. Запросы на выборку отправляются случайному серверу,​ запросы на изменение данных - главному,​ который автоматически дублирует их на вторичные сервера.
 +Принцип работы архитектуры share-nothing отличается только тем, что нет явного главного сервера,​ запросы на запись могут идти любому,​ который потом распределяет их по всем остальным узлам.
 +
 +{{db_clustering:​share-nothing.png}}
 +
 +{{jsf-ru:​plus.gif}} Селекты распределяются по нескольким серверам.
 +
 +{{jsf-ru:​minus.gif}} Апдейты выполняются на **всех** серверах.
 +
 +{{jsf-ru:​minus.gif}} Возвращение упавшего master'​а в строй - это целое приключение,​ требующее остановки базы (в случае репликации).
 +
 +{{jsf-ru:​minus.gif}} Добавление новых узлов требует остановки базы (в случае репликации) и копирования на него всех данных (в обоих случаях).
 +
 +{{jsf-ru:​minus.gif}} Узкое (и немасштабируемое) место - запись на диск.
 +
 +Реализации:​ [[http://​www-306.ibm.com/​software/​data/​db2/​9/​edition-enterprise.html|DB2 Enterprise]],​[[http://​pgcluster.projects.postgresql.org|PGCluster]],​ [[http://​www.mysql.com/​products/​database/​cluster/​|MySQL Cluster]]((Список ограничений:​ http://​dev.mysql.com/​doc/​refman/​5.1/​en/​mysql-cluster-limitations.html)),​ [[http://​sequoia.continuent.org|Sequoia]].
 +
 +
 +===== Партишенинг =====
 +{{db_clustering:​partitioning.png}}
 +
 +Принцип работы:​ данные делятся на куски, каждый из которых лежит на отдельном(ых) серверах.
 +
 +{{jsf-ru:​plus.gif}} При дроблении на достаточно мелкие куски можно до бесконечности (теоретически) разделять нагрузку на много серверов.
 +
 +{{jsf-ru:​minus.gif}} Добавление новых серверов требует ручной переразбивки данных,​ что требует остановки базы.
 +
 +{{jsf-ru:​minus.gif}} Высокая вероятность отключения отдельных частей данных в случае падения серверов,​ отвечающих за них.
 +
 +{{jsf-ru:​minus.gif}} Неравномерное распределение нагрузки.
 +
 +{{jsf-ru:​minus.gif}} Требуется постоянно пересматривать разделение для выравнивания нагрузки на отдельные сервера,​ что требует остановки базы.
 +
 +{{jsf-ru:​minus.gif}} Нетривиальная процедура дампинга.
 +
 +{{jsf-ru:​minus.gif}} В случае разбивки таблицы,​ при запросе не по тому параметру,​ по которому была разбивка,​ выполняются броадкасты на все сервера,​ содержащие части таблицы.
 +
 +{{jsf-ru:​minus.gif}} Джойны с участием таблиц,​ находящихся на разных серверах,​ приводят к **охренительному** траффику между ними.
 +
 +Реализации:​ [[http://​www-306.ibm.com/​software/​data/​db2/​9/​edition-enterprise.html|DB2 Enterprise]],​ [[http://​www.mysql.com/​products/​database/​cluster/​|MySQL Cluster]]((Список ограничений:​ http://​dev.mysql.com/​doc/​refman/​5.1/​en/​mysql-cluster-limitations.html)),​ [[http://​sequoia.continuent.org|Sequoia]]((Sequoia не умеет выполнять джойны с участием нескольких серверов.))
 +
 +
 +
 +===== Shared-disk =====
 +Принцип работы:​ существует одно дисковое хранилище,​ к которому присоединено много серверов,​ **не** хранящих данных,​ а читающих/​пишущих в это хранилище и пользующихся общим кэшем.
 +
 +{{db_clustering:​shared_disk.png}}
 +
 +{{jsf-ru:​plus.gif}} Элементарное включение новых серверов,​ без остановки.
 +
 +{{jsf-ru:​plus.gif}} База целиком доступна пока работает хотя бы один сервер.
 +
 +{{jsf-ru:​minus.gif}} Узкое место - хранилище данных. Но на одно мощное можно и потратиться,​ в отличие от предыдущих вариантов,​ где мощная дисковая система должна быть на каждом сервере.
 +
 +Реализации:​ [[http://​www.oracle.com/​technology/​products/​database/​clustering|Oracle Real Application Clusters]].
 +
 +===== Итого =====
 +Про PGCluster ничего не скажу, потому что почти ничего о нём не знаю. Аналогично с Sequoia, к тому же только для Java. MySQL Cluster, учитывая все его ограничения,​ совершенно неюзабелен. Остаётся DB2, но идея партишенинга порочна по сути, ну и Oracle, который в Standard Edition'​е,​ начиная с которого оно поддерживает кластеризацию,​ стоит по $15K на процессор. Вот такая вот неутешительная ситуёвина.
 +
 +===== Ссылки по теме =====
 +  * [[http://​www.oracle.com/​technology/​products/​database/​clustering/​pdf/​twp_rac_10g_vs_db2_v8.2[1].pdf|Сравнение Oracle RAC и DB2]]