• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • FEDERATED存储引擎概述

    当创建使用标准的存储引擎中的一个(例如桌子MyISAMCSVInnoDB),该表由表定义和相关联的数据。创建FEDERATED表时,表定义是相同的,但是数据的物理存储是在远程服务器上处理的。

    FEDERATED表由两个部分组成:

    • 远程服务器与数据库表,其又由表定义(存储在MySQL数据字典)和相关联的表的。远程表的表类型可以是远程mysqld服务器支持的任何类型,包括MyISAMInnoDB
    • 本地服务器与数据库表,其中表定义相匹配,该远程服务器上的对应的表的。表定义存储在数据字典中。本地服务器上没有数据文件。而是,表定义包含指向远程表的连接字符串。

    FEDERATED本地服务器上的表上执行查询和语句时,通常将在本地数据文件中插入,更新或删除信息的操作将发送到远程服务器以执行,在此操作中,它们将更新远程服务器或本地服务器上的数据文件。从远程服务器返回匹配的行。

    FEDERATED表设置的基本结构在图16.2“联邦表结构”中显示。

    图16.2联合表结构

    当客户端发出引用FEDERATED表的SQL语句时,本地服务器(执行SQL语句的地方)和远程服务器(实际存储数据的地方)之间的信息流如下:

    1. 存储引擎将遍历FEDERATED表具有的每一列,并构造一个引用远程表的适当SQL语句。
    2. 该语句使用MySQL客户端API发送到远程服务器。
    3. 远程服务器处理该语句,而本地服务器检索该语句产生的任何结果(受影响的行数或结果集)。
    4. 如果该语句产生结果集,则每一列都将转换为该FEDERATED引擎期望的内部存储引擎格式,并可用于将结果显示给发出原始语句的客户端。

    本地服务器使用MySQL客户端C API函数与远程服务器通信。它调用mysql_real_query()发送语句。要读取结果集,它使用mysql_store_result()并一次读取一行mysql_fetch_row()