Spec-Zone.ru › MySQL 8.4

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/federated-usagenotes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API