18.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.
© 2025 Oracle
Licensed under the GPLv2 License.