2012-02-07 77 views
1

好的做法,我創建Delphi應用程序與我的數據庫連接。在DB連接

在某些情況下我的應用程序需要在第二個寫多個條目,在其他時間它要餓死了幾分鐘。

所以它是沒有意義的打開,始終緊密連接,或保持開放幾個小時。

所以我認爲有關創建計時器(間隔= 1000),並且定時器 將下降到0,從10的整數上的每個蜱。當int爲 0連接將被關閉。

與db交互的每種方法都會運行另一種方法,即 將int設置爲10,並檢查連接是否打開,如果不是,則打開連接 。

這是在DB處理一個很好的做法,或有任何其他建議。

+0

請澄清這些注意事項1)您使用什麼連接組件? 2)你是針對企業應用程序嗎?謝謝。 – menjaraz 2012-02-07 05:52:31

+0

另外,哪個數據庫? – Harriv 2012-02-07 06:38:04

+0

我使用的MySQL,並且它是一個簡單的應用程序(未企業級) – VibeeshanRC 2012-02-07 07:02:18

回答

8
  1. 的DB的有不同的 「wheighted」 連接。例如,與Oracle OCI相比,MySQL API允許快速打開連接。所以,用MySQL你可以打開一個連接,做任何你需要的,關閉連接。開放/關閉時間將是不可知的。
  2. 數據庫的有不同的連接超時。例如,當MySQL連接不活動超過wait_timeout/interactive_timeout時,MySQL服務器將自動關閉連接。甲骨文將保持您的連接,只要您需要。所以,應用程序必須能夠處理該問題。
  3. 問題是關於資源。如果將有10K客戶端,所有保持連接opeb,那麼這可能會通過閒置但分配的資源使服務器超載。
  4. ,問題是有關應用程序的複雜性。如果必須保持許多數據集處於活動狀態,維護活動事務等,那麼重新打開連接將非常困難。
  5. 此外,一些數據訪問組件(如AnyDAC)允許自動恢復連接(more),當它由DBMS關閉或其他丟失時。

因此,基於您的DBMS,數據訪問組件,應用程序需求,您必須決定如何執行。例如:

  • 與MySQL,1-2客戶端,簡單的插入和多分鐘不活動的滯後,是需要之前,將關閉工作完成後,我會打開連接;
  • 與甲骨文,1K客戶端等,我將使用algorythm,像你所描述的。
+0

Oracle可以被配置成使用「共享服務器」模式(加連接池和會話複用)時,有許多連接,其不要不會一直使用數據庫。 OP建議的方法只會以更糟糕的方式重複已有的功能。從客戶端角度來看,會話保持打開狀態(無需重新初始化),而服務器將節省資源。 – 2012-02-07 15:21:39

+0

是的,正確的,許多事情可以從服務器端進行配置。仍然要關閉連接,當不需要時是一個好習慣。類似於調用.Free,當不需要對象時。 – 2012-02-07 15:56:05

+0

我同意連接在不需要時可以關閉,但這應該是「確定性調用」,就像.Free,而不是有時會觸發的計時器。還應考慮重新初始化所有數據庫依賴對象的成本。恕我直言,如果有一個適當的配置,以允許持久連接,同時不影響服務器性能/資源使用情況,在嘗試其他解決方案之前應該考慮它。 – 2012-02-07 20:51:04

0

在我看來,如果您的應用程序用戶活動並不意味着重連接/斷開連接操作,則不需要增加更多的複雜性。