繁体   English   中英

根据查询类型和表将流量路由到特定的MySQL连接

[英]Routing traffic to a specific MySQL connection depending on the query type and table

我认为这是一个常见的问题,经过一定程度的搜索没有返回任何内容。 我有几个mysql服务器,它们上面有不同的表,每个都是主服务器或读服务器。 我想通过读取从属和所有其他INSERT,UPDATE,ALTER等路由所有SELECT和其他非表修改查询。 一个主人,以及确保正确的主奴隶组合实际上有我要问的表。

TLDR基于表和查询类型(读或写)我想使用不同的mysql连接。

为了以一种干净的方式做到这一点,我正在创建一个包装器函数,它将检查查询并决定使用哪个连接。 在这个函数中,将是关于哪些表在哪些服务器上以及哪些是读取从属或主服务器的详细信息。 我将传入的所有内容都是包含sql语句的字符串。 我知道如何使用正则表达式实现它,但我更喜欢使用内置函数(如果存在)来解释SQL语​​法的任何可变性或我不知道的语句类型的可能性。

TLDR有没有比正则表达式更好的方法来从一个sql查询字符串中获取表名和查询类型? 什么是读取类型sql操作的详尽列表? 有没有人有一个很好的正则表达式已经找到SQL查询的所有变体的sql语句的部分?

我想象很多人在设置他们的系统时遇到了类似的问题,至少其中一些人以类似的方式解决了这个问题。 任何这些方向的帮助将不胜感激。 谢谢你的时间。

DoctrinePropel这样的ORM解决这种情况的方式是将每个表与一个连接相关联,然后使用查询对象来构建生成的SQL。

例如,要在Doctrine中构建SELECT查询,您可能会执行以下操作:

$users = UserTable::getInstance()
  ->createQuery()                      // SELECT is the default operation.
  ->andWhere('is_active = ?', $active)
  ->fetch();

如果您使用类以分段方法为您构建查询,则确定操作的性质和查询的主表是相当简单的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM