Эти термины сбивают с толку, неправильно используются и непоследовательно определены.
Для MySQL:
A База данных имеет несколько определений:
- «Схема» (используемая другими поставщиками / стандартами). Это набор таблиц. В экземпляре есть одна или несколько баз данных.
- Экземпляр. Для большей ясности следует использовать «сервер» или «сервер базы данных».
- Данные. «Набор данных» может быть лучший термин.
экземпляр относится к копии mysqld
, запущенной где-то на каком-то компьютере.
- Вы можете иметь несколько экземпляров на одном единое оборудование. (Редко)
- Вы можете иметь несколько экземпляров на одном устройстве, с экземплярами на разных виртуальных машинах или докерах. (удобно для тестирования)
- Обычно «экземпляр» относится к одному серверу с одной копией MySQL на нем. (Типично для крупномасштабных ситуаций)
A PARTITION
- это особый способ размещения c out table
(в database
).
- Это видно в
CREATE TABLE (...) PARTITION BY ...
. - Это «горизонтальное» разделение данных, часто по дате , но может быть какой-нибудь другой «столбец».
- Он не оказывает прямого влияния на производительность, что делает его редко полезным.
Shard ing не реализован в MySQL, но может выполняться поверх MySQL.
- Это также «горизонтальное» разделение данных, но в данном случае на несколько «экземпляры».
- Пример использования - это, например, социальные сети, где миллионы «пользователей» в основном обслуживаются ими самими. То есть большинство запросов сосредоточено на одном срезе данных, поэтому это удобно для группы пользователей на одном сервере и выполнять все эти запросы там.
- Это можно назвать «горизонтальным разделением», но не следует путать с
PARTITIONs
таблицы.
Вертикальное разбиение - это когда некоторые столбцы извлекаются из таблицы и помещаются в параллельную table.
- Обе таблицы будут (обычно) иметь одинаковые
PRIMARY KEY
, тем самым облегчая JOINs
. - Вертикальное разбиение (обычно) выполняется только в одном "экземпляре" ".
- Цели включают разделение больших столбцов текста / блога; разделение необязательных столбцов (и используйте
LEFT JOIN
, чтобы получить NULLs
). - Вертикальное разделение было несколько полезно в MyISAM, но редко полезно в InnoDB, поскольку этот движок делает это автоматически.
Репликация и Кластеризация
- Несколько экземпляров содержат одни и те же данные.
- Используется для «высокой доступности» (HA).
- Используется для масштабирования чтения.
- Ортогонально разделению или сегментированию.
- Нет смысла иметь экземпляры на одном сервере (за исключением тестирования / экспериментов / постановки /etc).