> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 扩展或插件与组件

> 何时构建 VEF 扩展，而不是使用 MySQL 的原生插件或组件接口。

VillageSQL 是 MySQL 的一个跟踪分支，并且可以作为直接替代品使用。MySQL 插件和组件接口在 VillageSQL 中与在 MySQL 中一样工作。VillageSQL 提供了 VillageSQL 扩展框架 (VEF)。对于添加新功能（自定义 SQL 函数、自定义类型、集成等），VEF 扩展是正确的模型。

## 应该放在哪里

如果您要构建新的东西，请在您自己的仓库中构建 VEF 扩展。插件和组件也可以工作，但 VEF 是正确的模型——请参阅[为什么使用扩展而不是插件和组件](#why-extensions-instead-of-plugins-and-components)。

应该放在 VillageSQL Server 仓库中的贡献：

|                            |                                                                               |
| -------------------------- | ----------------------------------------------------------------------------- |
| 对 VEF 本身的改进（新的钩子类型、SDK 功能） | 向 [server 仓库](https://github.com/villagesql/villagesql-server) 提交 PR          |
| 服务器错误修复                    | 在 [server 仓库](https://github.com/villagesql/villagesql-server) 中提交 Issue 或 PR |

<h2 id="why-extensions-instead-of-plugins-and-components">
  为什么使用扩展而不是插件和组件
</h2>

MySQL 插件和组件在 VillageSQL 中可以工作。VEF 扩展可以提供更多功能：

* **自定义类型**——定义新的列类型，插件和 UDF 无法做到这一点
* **打包**——以 `.veb` 文件形式分发，使用 `INSTALL EXTENSION` 安装
* **无需重启**——扩展在运行时加载和卸载
* **版本控制**——在扩展清单中声明，由服务器强制执行

## 创建新扩展

VEF 有两个 SDK，两者都通过同一框架进行注册：

* **C++**——[vsql-extension-template](https://github.com/villagesql/vsql-extension-template) 是起点。请查阅[使用 C++ 创建扩展](/docs/zh/mysql-8.4/0.0.5/create)。
* **Rust**——[vsql-extension-template-rust](https://github.com/villagesql/vsql-extension-template-rust) 是起点。请查阅[使用 Rust 创建扩展](/docs/zh/mysql-8.4/0.0.5/rust-sdk)。

C++ SDK 目前更为完整（聚合、prerun、变长参数、系统变量和状态变量、keyring、列存储）；Rust SDK 涵盖纯函数扩展和自定义类型。

## 如果 VEF 不支持您需要的功能

VEF 仍在不断发展。如果您需要一个尚未存在的钩子或功能：

* **提交一个 Issue** 到 [server 仓库](https://github.com/villagesql/villagesql-server/issues)，描述您需要的内容
* **对已有的 Issue 点赞**，如果该请求已经存在
* **提交一个 PR**，将钩子添加到 VEF 中——欢迎在 server 仓库中进行框架改进
