簡體   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