我目前正在从事一个项目,该项目涉及将大型 MySQL 数据库拆分为多个较小的分片。但是,客户端必须能够像以前一样查询数据库,而无需更改用户界面;也就是说,他们通过 MySQL 客户端(Workbench、DBForge 等)发送的任何查询都必须从主数据库返回与其分片相同的结果集。
这需要在客户端和服务器之间放置一个应用程序来拦截查询、分析它们、修改它们,并根据需要将它们重定向到主数据库或分片。我知道 MySQL Proxy 特别适合这项任务,但这就是问题所在。
我已经编写了一个 C# 应用程序,它接受一个 MySQL 查询字符串,修改它,查询它必须查询的任何分片,并聚合来自所有分片的结果。我的问题是我不知道如何将 MySQL 代理连接到这个应用程序。理想情况下,MySQL Proxy 会拦截查询,确定它是否“可分片”,然后将其发送到我的分片应用程序或主数据库。然后,分片应用程序会将其结果集发送回 MySQL 代理,后者会将其返回给客户端。
有什么明确的方法可以做到这一点吗?也许我要将 C# 应用程序转换为 WCF 服务? MySQL Proxy 有连接数据库的方法,但我不知道它是否可以连接到简单的 Web 服务,更不用说 WCF,考虑到它是用 Lua 编写的。有没有 MySQL 代理的替代方案可以更好地满足我的需求?
最佳答案
Mysql 允许您使用 Lua 编写脚本并连接到 C 或 C++。我没有使用 C# 的经验,但我想您不会有任何问题。
- 安装 mysql-proxy。您可以确定一个或多个后端 mysql 数据库。
- 将您的 C 代码编译为一个模块,以便从 Lua 调用:link
- 根据您的代码为您的查询设置后端 IP 并重定向它。
搜索 Lua 文档时要小心,因为 mysql-proxy 实现了 Lua 5.1,并且过程在不同版本之间变化很大。
关于c# - 将 MySQL 代理连接到 C# 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13404528/