15.8.3 Примечания и советы по хранилищу FEDERATED
При работе с хранилищем FEDERATED следует учитывать следующие моменты:
Таблицы
FEDERATEDмогут быть реплицированы на другие реплики, но необходимо убедиться, что серверы-реплики могут использовать комбинацию имени пользователя/пароля, определённую в строкеCONNECTION(или строке в таблицеmysql.servers), для подключения к удалённому серверу.
Ниже перечислены функции, которые хранилище FEDERATED поддерживает и не поддерживает:
Удалённый сервер должен быть сервером MySQL.
Удалённая таблица, к которой указывает таблица
FEDERATED, должна существовать до попытки доступа к таблице через таблицуFEDERATED.Одна таблица
FEDERATEDможет указывать на другую, но следует быть осторожным, чтобы не создать цикл.-
Таблица
FEDERATEDне поддерживает индексы в обычном понимании; поскольку доступ к данным таблицы осуществляется удалённо, именно удалённая таблица использует индексы. Это означает, что для запроса, который не может использовать индексы и поэтому требует полного сканирования таблицы, сервер извлекает все строки из удалённой таблицы и фильтрует их локально. Это происходит независимо от любыхWHEREилиLIMIT, используемых с этим операторомSELECT; эти предложения применяются локально к возвращённым строкам.Запросы, которые не используют индексы, могут привести к плохой производительности и перегрузке сети. Кроме того, поскольку возвращённые строки должны храниться в памяти, такой запрос также может привести к обмену данными на локальном сервере или даже к зависанию.
-
Следует проявлять осторожность при создании таблицы
FEDERATED, поскольку определение индекса из эквивалентной таблицыMyISAMили другой таблицы может не поддерживаться. Например, создание таблицыFEDERATEDс префиксом индекса не поддерживается для столбцовVARCHAR,TEXTилиBLOB. Следующее определение вMyISAMявляется допустимым:CREATE TABLE `T1`(`A` VARCHAR(100),UNIQUE KEY(`A`(30))) ENGINE=MYISAM;
Префикс ключа в этом примере несовместим с хранилищем
FEDERATED, и эквивалентное предложение завершается ошибкой:CREATE TABLE `T1`(`A` VARCHAR(100),UNIQUE KEY(`A`(30))) ENGINE=FEDERATED CONNECTION='MYSQL://127.0.0.1:3306/TEST/T1';
По возможности, следует пытаться разделять определение столбца и индекса при создании таблиц как на удалённом, так и на локальном сервере, чтобы избежать этих проблем с индексами.
Внутренне, реализация использует
SELECT,INSERT,UPDATEиDELETE, но неHANDLER.Хранилище
FEDERATEDподдерживаетSELECT,INSERT,UPDATE,DELETE,TRUNCATE TABLEи индексы. Оно не поддерживаетALTER TABLEили любые операторы языка определения данных, напрямую влияющие на структуру таблицы, кромеDROP TABLE. Текущая реализация не использует подготовленные запросы.FEDERATEDпринимает операторыINSERT ... ON DUPLICATE KEY UPDATE, но если возникает нарушение уникальности ключа, оператор завершается ошибкой.Транзакции не поддерживаются.
-
FEDERATEDобрабатывает массовые вставки таким образом, что несколько строк отправляются в удалённую таблицу в пакетном режиме, что улучшает производительность. Кроме того, если удалённая таблица является транзакционной, это позволяет удалённому хранилищу корректно выполнять откат оператора в случае возникновения ошибки. Эта возможность имеет следующие ограничения:Размер вставки не может превышать максимальный размер пакета между серверами. Если вставка превышает этот размер, она разбивается на несколько пакетов, и может возникнуть проблема с откатом.
Обработка массовых вставок не происходит для
INSERT ... ON DUPLICATE KEY UPDATE.
Хранилище
FEDERATEDне может знать, изменилась ли удалённая таблица. Причина в том, что эта таблица должна работать как файл данных, который никогда не будет изменяться ничем, кроме системы управления базой данных. Целостность данных в локальной таблице может быть нарушена, если произойдёт любое изменение в удалённой базе данных.При использовании строки
CONNECTIONнельзя использовать символ '@' в пароле. Это ограничение можно обойти, используя операторCREATE SERVERдля создания соединения сервера.Параметры
insert_idиtimestampне передаются поставщику данных.Любое оператор
DROP TABLE, выполняемый над таблицейFEDERATED, удаляет только локальную таблицу, а не удалённую таблицу.Таблицы
FEDERATEDне работают с кэшем запросов.Пользовательское разбиение не поддерживается для таблиц
FEDERATED.
© 2025 Oracle
Licensed under the GPLv2 License.