Серверы баз данных, разделы и экземпляры - PullRequest
1 голос
/ 13 июля 2020

В MySQL (и PostgreSQL), что именно представляет собой экземпляр БД и раздел БД?

Например, разные разделы БД обязательно должны находиться на разных экземпляров базы данных ? Или один экземпляр БД может управлять несколькими разделами? Если второе, какой смысл называть это "разделом" ? Будет ли БД знать об этом в этом случае?

Вот цитата из документа, описывающего дизайн системы, из онлайн-курса:

Как мы можем спланировать будущий рост нашей системы?

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

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

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

Для MySQL:

A База данных имеет несколько определений:

  • «Схема» (используемая другими поставщиками / стандартами). Это набор таблиц. В экземпляре есть одна или несколько баз данных.
  • Экземпляр. Для большей ясности следует использовать «сервер» или «сервер базы данных».
  • Данные. «Набор данных» может быть лучший термин.

экземпляр относится к копии mysqld, запущенной где-то на каком-то компьютере.

  • Вы можете иметь несколько экземпляров на одном единое оборудование. (Редко)
  • Вы можете иметь несколько экземпляров на одном устройстве, с экземплярами на разных виртуальных машинах или докерах. (удобно для тестирования)
  • Обычно «экземпляр» относится к одному серверу с одной копией MySQL на нем. (Типично для крупномасштабных ситуаций)

A PARTITION - это особый способ размещения c out tabledatabase).

  • Это видно в CREATE TABLE (...) PARTITION BY ....
  • Это «горизонтальное» разделение данных, часто по дате , но может быть какой-нибудь другой «столбец».
  • Он не оказывает прямого влияния на производительность, что делает его редко полезным.

Shard ing не реализован в MySQL, но может выполняться поверх MySQL.

  • Это также «горизонтальное» разделение данных, но в данном случае на несколько «экземпляры».
  • Пример использования - это, например, социальные сети, где миллионы «пользователей» в основном обслуживаются ими самими. То есть большинство запросов сосредоточено на одном срезе данных, поэтому это удобно для группы пользователей на одном сервере и выполнять все эти запросы там.
  • Это можно назвать «горизонтальным разделением», но не следует путать с PARTITIONs таблицы.

Вертикальное разбиение - это когда некоторые столбцы извлекаются из таблицы и помещаются в параллельную table.

  • Обе таблицы будут (обычно) иметь одинаковые PRIMARY KEY, тем самым облегчая JOINs.
  • Вертикальное разбиение (обычно) выполняется только в одном "экземпляре" ".
  • Цели включают разделение больших столбцов текста / блога; разделение необязательных столбцов (и используйте LEFT JOIN, чтобы получить NULLs).
  • Вертикальное разделение было несколько полезно в MyISAM, но редко полезно в InnoDB, поскольку этот движок делает это автоматически.

Репликация и Кластеризация

  • Несколько экземпляров содержат одни и те же данные.
  • Используется для «высокой доступности» (HA).
  • Используется для масштабирования чтения.
  • Ортогонально разделению или сегментированию.
  • Нет смысла иметь экземпляры на одном сервере (за исключением тестирования / экспериментов / постановки /etc).
2 голосов
/ 13 июля 2020

Разделы с точки зрения набора функций MySQL и PostgreSQL представляют собой физические сегменты данных. Они существуют в одном экземпляре базы данных и используются для уменьшения объема данных, с которыми вы взаимодействуете в определенное время, чтобы справиться с ситуациями с большим объемом данных.

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

...