簡體   English   中英

如何正確處理數據庫連接?

[英]How to properly handle database connections?

我想優化我的系統,以便能夠處理大量用戶。 即使網站永遠不受歡迎,我也想做正確的事情。

無論如何,我目前正在使用2個數據庫解決方案的組合:

1.) Either SQL (mysql, postgre) via SQLAlchemy OR MongoDB
2.) Redis

我使用Redis作為“熱門”數據庫(因為它更快,卸載主數據庫解決方案的壓力),並且通過cron任務在兩個之間同步數據。 我使用Redis進行會話管理,統計等。但是,如果我的Redis服務器崩潰,站點將保持運行(回退到sql / mongo)。

所以這是我的數據設計。 現在我想做正確的連接。

由於99%的頁面都需要sql / mongo和redis,我目前的設計如下:

- When new HTTP request comes in, I connect to all databases
- When page finishes rendering, I disconnect from databases

現在顯然我正在做很多連接/斷開連接。 我已經計算出這個模型可以維持相當數量的訪問者,但我想知道是否有更好的方法來做到這一點。

請求之間的持久連接是否會提高性能/負載,還是大量的開放連接會阻塞服務器? 你會建議創建一個連接池嗎? 如果是這樣,何時應該創建連接池以及模型應該如何訪問它(或從中獲取連接對象)。

如果這些問題很愚蠢,我很抱歉,但我是新手。

我不認為這是事先優化事物的好方法。 你不知道瓶頸會出現在哪里,你可能只是浪費時間去做你將來不需要的東西。

如果您將使用ORM,可以稍后更改數據庫類型,因此您現在可以使用任何數據庫類型。 無論如何,如果您的網站流行度會提高,您將需要獲得更多服務器,添加一些任務隊列(芹菜)等。以后您可以做很多事情來優化。 現在,您應該專注於讓您的網站變得流行,並使用可以在未來擴展的技術。

如果要打開連接,則應該考慮使用池,以避免使用每個會話連接或類似的東西來破壞系統(只要它們被正確鎖定以避免泄漏)。 也就是說,這樣做的必要性尚不清楚。 如果您可以使用數據庫的某些平均/最差情況連接時間來量化系統,那么您將能夠做出更明智的決策。

嘗試運行腳本來錘擊您的系統並調查數據庫相關的時間。 這應該可以幫助您立即決定是否保留持久連接和方便的DB加載腳本以供日后使用。

暫無
暫無

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

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