簡體   English   中英

每個PHP應用程序是否同時保持兩個MySQL連接打開是一個好習慣?

[英]Is holding two MySQL connections open simultaneously per PHP application good practice?

我的PHP代碼允許用戶以只讀用戶的身份執行任意SQL代碼。 它還需要具有寫能力的用戶的訪問權限。 我的代碼在“具有寫權限的用戶”中執行命令,然后使用單獨的連接使用“只讀用戶”查詢數據庫。 然后,它再次使用“具有寫權限的用戶”進行查詢並退出腳本。

在執行只讀用戶的查詢時,它將使具有寫功能的用戶連接保持打開狀態。 據我所知,這是最好的方法,但是我的大學擔心MySQL的某種不習慣做法,因此希望關閉具有寫功能的用戶的連接並稍后重新打開它(大概是因為它使與該連接的並發連接數增加了一倍) MySQL。)執行此操作的最佳方法是什么?

什么效率更高?為什么:每頁一個db連接或每個功能一個db連接? 他說:“通常,數據庫連接的創建成本很高。”

什么效率更高?為什么:每頁一個db連接或每個功能一個db連接? 他說:“通常,數據庫連接的創建成本很高。”

我要挑戰那句話。 對於某些數據庫來說可能是正確的,但對於所有這些數據庫都不一定是正確的。 眾所周知,MySQL在創建連接時非常輕巧,使用本地unix域套接字時更是如此。

更有趣的是:如果使用的功能要求連接不變,那該怎么辦? 就像插入數據集,然后選擇LAST_INSERT_ID()? 如果您使用只讀連接,則將無法使用。

雖然我確實認為使用只讀用戶帳戶對安全性有益,但只有在腳本中使用的唯一帳戶才有意義。 否則,您將以某種方式根據查詢的類型來決定要使用的連接的邏輯-如果您將自動使用正確的連接進行讀取或寫入,則從安全角度來看,使用兩個連接是沒有意義的。

另外,如果SELECT將連接到另一個連接,則在事務期間您將無法使用SELECT語句。

總而言之:使用多個連接來完成一個連接也可以做的事情似乎是一個壞主意-除非您可以提供更多理由說明這樣做。

再次閱讀您的問題,我偶然發現了您的特定原因:您執行任意SQL語句。 這樣,使用受限帳戶確實很有意義。 打開和關閉等待寫入的連接也沒有意義。 這樣做的唯一原因是數據庫服務器達到他配置的並發連接限制。

只要您可以清楚地知道哪個連接是哪個,您當前的解決方案就可以證明是很好的,甚至具有可以輕松擴展到主從場景的優點。 也有一些只打開,當你需要它寫入連接的說法,但在Web請求(我假設我們正在談論)的短命的世界,只要你把它打開它只是罰款任由如果您需要它,或者大概在請求結束后0.5秒后自動關閉它。

如果我們要談論永久運行的守護程序,則一定要在無活動的N秒/分鍾后關閉連接,無論如何您可能會有一個以上的連接,從而使您能夠異步運行多個查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM