2012-06-29 83 views
0

我試圖在MySQL服務器前面實現一個代理層,它將捕獲冗餘SQL查詢並將它們只發送一次到服務器。換句話說,我有許多與MySQL交談的客戶端(在PHP,Perl中,在不同的網絡節點上),並且經常重複相同的查詢。當流量增加時,MySQL通常會崩潰。mysql前面的代理冗餘刪除

問題是 - 你知道任何開源(或商業)工具,可以幫助嗎?我嘗試了MySQL Proxy,但看起來它不能幫助。

+0

通常人們試圖解決這個緩存sql在應用程序端返回的數據。 (使用memchached或類似的應用程序來避免重新查詢數據庫)。我從來沒有想過這件事。 – mobius

+0

問題:當你說「經常重複相同的SELECT查詢」時,請求中是否具有相同的參數,或者是具有不同參數請求的同一查詢? – RolandoMySQLDBA

+0

這是相同的查詢具有相同的參數 – yegor256

回答

0

你可能想看看HAProxyhow it works

這裏有兩個額外的建議

SUGGESTION#1設置羣集

如果你的數據是所有的InnoDB,你應該嘗試Percona XtraDB Cluster,並連同它使用HAProxy的。您可以在羣集中的所有服務器(包括寫入主文件)上進行負載平衡。

SUGGESTION#2安裝程序通過MySQL複製羣集,以1個或多個數據庫服務器

使用HAProxy的負載平衡你的整個讀取從

如果你的預算是讀取和您的數據比較小,setup multiple MySQL Instances on one server

+0

好的建議,但它沒有做我想找的 - 相同的SQL查詢仍然能夠同時到達MySQL – yegor256

+0

這兩個建議都很好,但它們不能解決問題的根本原因 - 重複的查詢將到達MySQL服務器。額外的服務器/集羣將使系統更大,但不會更聰明。 – yegor256

3

兩個建議:

  1. MySQL代理 這是一個來自MySQL的前端代理,它按照我所知做你想做的事
  2. vtocc 從YouTube mysql環境中使用的vitess項目也做了類似的事情。查詢合併:將查詢執行過程中收到的任何後續請求重複使用正在進行的查詢結果的功能。