我應該爲每個Apache線程初始化數據庫遊標一次,還是應該在HTTP客戶端可用的每個函數中初始化一個?Web應用程序:保持DB遊標還是重新創建?
當客戶端終止連接(即用戶關閉瀏覽器選項卡)時會發生什麼?正在處理請求的服務器端函數是否正常繼續,直到它返回,還是立即終止而沒有機會關閉所有事務?
1
A
回答
0
光標是昂貴的資源。
一般...
剛打開它們,當你需要他們。
只要你完成它們就關閉它們。
遊標每線程可能會不必要地佔用資源。有時你有太多的數據庫活動,每個線程的遊標可能會有更高的性能。這很少見。如果你認爲光標開關正在減慢速度,你需要測量每個函數和每個線程之間的差異,看看實際發生了什麼。
服務器不知道瀏覽器中發生了什麼。零。來自瀏覽器的每個請求都是一個獨立的,獨特的,斷開的事件。
如果瀏覽器「關閉」,那並不意味着什麼。這隻意味着服務器沒有得到任何進一步的請求。
如果服務器試圖下載響應,那麼套接字崩潰,服務器最終停止嘗試。
如果服務器沒有處理任何東西,它仍然沒有處理任何東西。
0
我想初始化這樣的資源,如數據庫連接或遊標是確定每個線程。一些框架/庫爲此使用線程局部「全局」變量。瞭解數據庫最大客戶端連接限制。是否保持數據庫連接仍然打開,或花費一些時間連接到數據庫的每個請求是由您的決定。它還取決於數據庫服務器每個連接需要多少資源 - AFAIK PostgreSQL爲連接提供新進程(這非常昂貴),而MySQL使用線程。
這取決於什麼Web服務器運行您的應用程序。如果有人關閉了瀏覽器標籤,你可能會注意到它可能是當你想寫入HTTP響應到套接字 - 它應該引發寫入錯誤或類似的東西。但我可以想象,當檢測到來自客戶端的關閉連接時,配置爲終止進程/線程的Web服務器。但是,當web應用程序立即終止時(例如斷電:)或強制(web)服務器重新啓動,仍然存在一些情況。
小提示 - 在處理HTTP請求之前,您應該檢查並回滾事務,以防在處理最後一個請求時連接沒有正確回滾時引發異常。 (或者你可以在處理HTTP請求之後執行此操作。)在處理HTTP請求之前,還要檢查數據庫連接是否仍然存在(可能會耗時)。
相關問題
- 1. 創建Web應用程序
- 2. 部署Web應用程序時是否應該重新創建容器?
- 3. iPhone web應用程序總是重新加載應用程序
- 4. 我應該使用ServiceStack創建ASP.net Web應用程序還是ASP.net MVC?
- 5. 我應該保持連接還是應該每次創建新連接?
- 6. Url Rewrite:www應該重新寫入應用程序還是Web服務器?
- 7. android應用更新後保持realm db
- 8. 重複使用遊標與創建新遊標的權衡是什麼?
- 9. 在AJAX應用程序中保持Web應用程序狀態
- 10. 是可以創建一個Web應用程序的圖標?
- 11. Web應用程序創建網站導遊
- 12. 保持Web應用程序表單中的主鍵值更新
- 13. 單頁Web應用程序應該保持一個Web Socket連接到服務器還是多個?
- 14. 保持內部應用程序更新
- 15. 在現有的Web應用程序中創建一個API還是單獨的?
- 16. 如何檢查應用程序是遊戲還是不是android?
- 17. 重新啓動sails.js應用程序時保持用戶登錄
- 18. 使用Ember.js創建Web應用程序
- 19. 如何創建iPad應用程序,重用我的JS應用程序構建的Web應用程序
- 20. 使用CodeIgniter CSRF保護創建Web應用程序的API
- 21. 創建支持多個後端的Web應用程序
- 22. 應用程序設置...我應該選擇「漫遊」還是不?
- 23. 用谷歌應用程序引擎創建Web應用程序?
- 24. 創建Spring Web應用程序:步驟?
- 25. 創建本地Web應用程序
- 26. 創建簡單的Web應用程序?
- 27. 創建動態Web應用程序
- 28. 爲Web應用程序創建算法
- 29. 在Android中創建Web應用程序
- 30. 在web應用程序中創建ListView