18.8.1 FEDERATED 存储引擎概述
使用标准存储引擎(例如MyISAM
、CSV
或InnoDB
)创建表时,表包括表定义和关联数据。使用FEDERATED
创建表时,表定义相同,但是数据的物理存储在远程服务器上。
一个FEDERATED
表由两个元素组成:
-
远程服务器拥有一个数据库表,该表包括表定义(存储在 MySQL 数据字典中)和关联数据。远程表的表类型可以是远程
mysqld
服务器支持的任何类型,包括MyISAM
或InnoDB
。 -
本地服务器拥有一个数据库表,其中表定义与远程服务器对应表的表定义匹配。表定义存储在数据字典中,没有本地数据文件,而是包括指向远程表的连接字符串。
在本地服务器上执行FEDERATED
表查询和语句时,通常将信息插入、更新或删除操作发送到远程服务器执行,在远程服务器上更新数据文件或返回匹配行从远程服务器。
FEDERATED 表的基本结构如图18.2,“FEDERATED 表结构”所示。
当客户端发出对 FEDERATED 表的 SQL 语句时,信息流动于本地服务器(执行 SQL 语句)和远程服务器(存储数据)的过程如下:
-
存储引擎遍历 FEDERATED 表中的每一列,并构建一个适合远程表的 SQL 语句。
-
然后,使用 MySQL 客户端 API 将语句发送到远程服务器。
-
远程服务器处理语句,然后本地服务器检索语句产生的结果(影响行数或结果集).
-
如果语句产生了结果集,每一列都被转换为 FEDERATED 引擎期望的内部存储格式,以便将结果显示给发出原始语句的客户端。
本地服务器使用 MySQL 客户端 C API 函数与远程服务器通信。它使用mysql_real_query()
发送语句,以读取结果集,使用mysql_store_result()
和逐行读取使用mysql_fetch_row()
.