MySQL Federated

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 17:44, 20 декабря 2017.
MySQL Federated Storage Engine
Создатели: Patrick Galbraith, Brian Aker
Выпущена: 2005
Операционная система: Linux, Mac OS X, Unix; Windows
Платформа: x86, x86-64, SPARC, MIPS, PowerPC
Локализация: C/C++
Тип ПО: Database engine
Лицензия: GNU General Public License
Веб-сайт http://mysql.bkbits.net

MySQL Federated - механизм хранения MySQL relational database management system который позволяет пользователю создавать локальное отображение удаленной таблицы (хранящейся в облаке) и работать с ней так же как с локальной. Он использует API-интерфейс клиентской библиотеки MySQL в качестве транспорта данных, рассматривая удаленный источник данных так же, как и другие механизмы хранения, обрабатывает локальные источники данных, являются ли они файлами MYD (MyISAM), памятью Cluster , Heap) или элементами табличного пространства (InnoDB). Каждая Federated таблица, которая определена, содержит один файл .frm (файл определения данных, содержащий информацию, такую как URL источника данных). Физически данные могут храниться на локальном или удаленном экземпляре MySQL.

Чтобы создать Federated таблицу, нужно указать URL-адрес в строке CONNECTION

create table t1 (
 a int,
 b varchar(32))
ENGINE=FEDERATED CONNECTION='mysql://user@hostname/test/t1'

Формат строки URL следующий:

scheme://user:pass@host:port/schema/tablename

После создания Federated таблицы пользователь должен убедиться, что удаленный источник данных действительно существует, в противном случае будет выдана ошибка. Механизм хранения MySQL Federated был создан Патриком Гэлбрейтом и Брайаном Акером. Он был представлен в 2005 году с MySQL 5.0.

Обзор

Когда вы создаете таблицу с использованием одного из стандартных механизмов хранения (таких как MyISAM, CSV или InnoDB), таблица состоит из непосредственно определения таблицы и связанных с ним данных. Когда вы создаете таблицу FEDERATED, определение таблицы такое же, но физически данные обрабатывается на удаленном сервере.

Таблица FEDERATED состоит из двух элементов:

  1. Удаленный сервер с таблицей базы данных, который, в свою очередь, состоит из определения таблицы (хранится в файле .frm) и связанной таблицы. Тип таблицы удаленной таблицы может быть любым типом, поддерживаемым удаленным сервером mysqld, включая MyISAM или InnoDB.
  2. Локальный сервер с таблицей базы данных, где определение таблицы совпадает с таблицей соответствующей таблице на удаленном сервере. Определение таблицы хранится в файле .frm. Однако на локальном сервере нет файла данных. Вместо этого определение таблицы включает строку подключения, указывающую на удаленную таблицу.
Структура

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

Когда клиент выдает инструкцию SQL, которая ссылается на таблицу FEDERATED, поток информации между локальным сервером (где выполняется оператор SQL) и удаленным сервером (где данные физически хранятся) выглядит следующим образом:

  1. Механизм хранения просматривает каждый столбец, который имеет таблица FEDERATED, и создает соответствующий оператор SQL, относящийся к удаленной таблице.
  2. Оператор отправляется на удаленный сервер с использованием клиентского API MySQL.
  3. Удаленный сервер обрабатывает оператор, а локальный сервер извлекает любой результат, который производит оператор (счетчик затронутых строк или набор результатов).
  4. Если оператор создает результирующий набор, каждый столбец преобразуется в формат внутреннего хранилища, который ожидается движком FEDERATED и может быть использован для отображения результата клиенту, который выдал исходный оператор.
  5. Локальный сервер связывается с удаленным сервером с помощью функций API клиента MySQL C. Он вызывает mysql_real_query () для отправки инструкции. Чтобы прочитать набор результатов, он использует mysql_store_result () и выбирает строки по одному с помощью mysql_fetch_row ().

Создание Federated таблицы

Чтобы создать таблицу FEDERATED, вы должны выполнить следующие шаги:

  1. Создайте таблицу на удаленном сервере. Обратите внимание на определение существующей таблицы, например, используя инструкцию SHOW CREATE TABLE.
  2. Создайте таблицу на локальном сервере с идентичным определением таблицы, но добавьте информацию о соединении, которая связывает локальную таблицу с удаленной таблицей.

Например, вы можете создать следующую таблицу на удаленном сервере:

CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

Создать локальную таблицу, которая будет объединена с удаленной таблицей можно двумя способами. Вы можете создать локальную таблицу и указать строку соединения (содержащую имя сервера, логин, пароль), который будет использоваться для подключения к удаленной таблице с помощью CONNECTION, или вы можете использовать существующее соединение, которое вы создали ранее с помощью CREATE SERVER.

Используя CONNECTION

Необходимо указать строку CONNECTION после строки ENGINE:

CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

Формат строки CONNECTION следующий: scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name где:

  • scheme: признанный протокол подключения. В качестве значения схемы в данный момент поддерживается только mysql.
  • user_name: имя пользователя для подключения. Этот пользователь должен быть создан на удаленном сервере и должен иметь соответствующие привилегии для выполнения необходимых действий (SELECT, INSERT, UPDATE и т. д.) в удаленной таблице.
  • password: (Необязательно) Соответствующий пароль для user_name.
  • host_name: имя хоста или IP-адрес удаленного сервера.
  • port_num: (Необязательно) Номер порта для удаленного сервера. Значение по умолчанию - 3306.
  • db_name: имя базы данных, содержащей удаленную таблицу.
  • tbl_name: имя удаленной таблицы. Имя локальной и удаленной таблицы не должно совпадать.

Используя CREATE SERVER

Если вы создаете несколько таблиц FEDERATED на том же сервере или хотите упростить процесс создания таблиц FEDERATED, вы можете использовать оператор CREATE SERVER для определения параметров подключения к серверу так же, как и с строкой CONNECTION.

Формат оператора CREATE SERVER:

CREATE SERVER
server_name
FOREIGN DATA WRAPPER wrapper_name
OPTIONS (option [, option] ...)

server_name используется в строке соединения при создании новой таблицы FEDERATED, как было указано выше.

Создадим соединение:

CREATE SERVER fedlink
FOREIGN DATA WRAPPER mysql
OPTIONS (USER 'fed_user', HOST 'remote_host', PORT 9306, DATABASE 'federated');

Используем его:

CREATE TABLE test_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='fedlink/test_table';

Имя соединения в этом примере содержит имя созданного выше соединения (fedlink) и имя таблицы (test_table) для ссылки, разделенной слэшем. Если вы укажете только имя соединения без имени таблицы, будет использовано имя локальной таблицы.

Источники

  • MySQL вебсайт [Электронный ресурс]:MySQL Documentation on Federated Storage Engine — Дата обращения: 05.11.2017 /Режим доступа:[1]