federated-description.md 2.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
### 16.8.1 联合存储引擎概述

当您使用标准存储引擎之一创建表时(例如`MyISAM`,`CSV`要么`InnoDB`),表由表定义和相关数据组成。当你创建一个`联邦`表,表定义相同,但数据的物理存储在远程服务器上处理。

一种`联邦`表由两个元素组成:

-   一种*远程服务器*使用数据库表,该表又由表定义(存储在 MySQL 数据字典中)和关联的表组成。远程表的表类型可以是远程支持的任何类型`mysqld`服务器,包括`MyISAM`要么`InnoDB`.

-   一种*本地服务器*使用数据库表,其中表定义与远程服务器上相应表的定义匹配。表定义存储在数据字典中。本地服务器上没有数据文件。相反,表定义包含一个指向远程表的连接字符串。

    在执行查询和语句时`联邦的`在本地服务器上,通常会从本地数据文件插入、更新或删除信息的操作会被发送到远程服务器执行,在远程服务器上更新数据文件或从远程服务器返回匹配行。

    a的基本结构`联邦的`表格设置如所示[图16.2,“联邦表结构”](federated-description.html#figure-se-federated-structure).

[](<>)

**图16.2联邦表结构**

<img alt="Content is described in the surrounding text." src="images/se-federated-structure.png" height="392" width="384" />

当客户机发出引用`联邦的`表中,本地服务器(执行SQL语句的地方)和远程服务器(物理存储数据的地方)之间的信息流如下所示:

1.  存储引擎会查看`联邦的`表具有并构造了一个引用远程表的适当SQL语句。

2.  该语句使用MySQL客户端API发送到远程服务器。

3.  远程服务器处理该语句,本地服务器检索该语句生成的任何结果(受影响的行数或结果集)。

4.  如果语句生成一个结果集,则每个列都将转换为`联邦的`引擎期望并可以用于向发出原始语句的客户端显示结果。

    本地服务器使用MySQL客户端C API函数与远程服务器通信。它调用[`mysql_real_query()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-real-query.html)发送声明。要读取结果集,它使用[`mysql_存储_结果()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-store-result.html)并使用[`mysql_fetch_row()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-fetch-row.html).