很多客戶端用TCP連接服務器A,客戶頻繁地做查詢余額等操作。資料庫在服務器B上,使用的MySQL。為了不讓資料庫成為整個系統的瓶頸,我現在想到了兩個方案:
方案一:
服務器A把所有客戶的請求放到請求佇列,然后開10-100個資料庫操作執行緒,每個執行緒建立一個服務器B的資料庫連接,執行緒從請求佇列里面每次取一個請求,使用MySQL的C API阻塞操作資料庫。
方案二:
增加一個服務器C提供余額查詢等操作的HTTP形式的API,服務器A使用異步的HTTP請求來想服務器C查詢資料庫。
我考慮的利弊如下:
方案一可以直接操作資料庫,不需要再經過另一個服務器C,感覺效率會高一些。但是因為每個資料庫執行緒都是阻塞操作資料庫的,如果并發量很大,比如超過100并發,會不會100個執行緒也忙不過來?這樣的話,就需要再增加執行緒,再增加執行緒就會嚴重影響服務器A的CPU效率。
方案二不管并發量多大,都不需要多執行緒來操作資料庫,因為用異步HTTP就能處理,感覺服務器A的效率就會大大提升。但是資料庫操作需要再增加一個服務器C,從整體效率來看,會不會也不高?
以上是我想到的兩個方案,前輩們如果有更好的方案請指教。比如方案一中,怎么用異步直接操作資料庫?我就不用開那么多執行緒了。
uj5u.com熱心網友回復:
高手高手快出現uj5u.com熱心網友回復:
SQL Server的話可以看下sqldependency,其他資料庫可以用觸發器來呼叫外部程式進行通知。uj5u.com熱心網友回復:
你說的后面那個方法具體怎么弄我不會,請問方案二用異步HTTP API的方式好嗎?
uj5u.com熱心網友回復:
自己頂,等待高手出現。uj5u.com熱心網友回復:
觸發器呼叫java之類的程式,通程序式來通知客戶端資料已經變化了。uj5u.com熱心網友回復:
memcacheuj5u.com熱心網友回復:
我不是想監控資料庫的資料變化,我是想通過異步的方式訪問資料庫。
uj5u.com熱心網友回復:
自己寫服務器,更新的時候發通知到服務器,服務器再廣播到客戶端。uj5u.com熱心網友回復:
看來大家都理解成了資料庫監控了
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/153568.html
標籤:數據庫
上一篇:詢問帖,關于《VC++就業培訓寶典之MFC視頻教程》
下一篇:發送粘貼訊息
