18.8.3 Примечания и советы по хранилищу FEDERATED
При работе с хранилищем FEDERATED следует учитывать следующие моменты:
Таблицы
FEDERATEDмогут быть реплицированы на другие реплики, но необходимо убедиться, что серверы-реплики могут использовать комбинацию пользователя/пароля, определённую в строкеCONNECTION(или строке в таблицеmysql.servers) для подключения к удалённому серверу.
Следующие пункты указывают на возможности и ограничения хранилища FEDERATED:
Удаленный сервер должен быть сервером MySQL.
Удаленная таблица, к которой указывает таблица
FEDERATED, должна существовать, прежде чем вы попытаетесь получить доступ к таблице через таблицуFEDERATED.Одна таблица
FEDERATEDможет указывать на другую, но необходимо быть осторожным, чтобы не создать цикл.-
Таблица
FEDERATEDне поддерживает индексы в обычном понимании; поскольку доступ к данным таблицы осуществляется удаленно, удаленная таблица фактически использует индексы. Это означает, что для запроса, который не может использовать индексы и, следовательно, требует полного сканирования таблицы, сервер извлекает все строки из удаленной таблицы и фильтрует их локально. Это происходит независимо от используемых с этим операторомSELECTWHEREилиLIMIT; эти условия применяются локально к возвращенным строкам.Запросы, которые не используют индексы, могут привести к плохой производительности и перегрузке сети. Кроме того, поскольку возвращаемые строки должны храниться в памяти, такой запрос также может привести к подкачке на локальном сервере или даже зависанию.
-
При создании таблицы
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.
© 2025 Oracle
Licensed under the GPLv2 License.