簡體   English   中英

如何在mod_perl中建立DBIC持久數據庫連接?

[英]How can I have DBIC persistent database connection in mod_perl?

我正在為我的Web應用程序使用mod_perl。 目前,我計划在整個網絡上使用mysql數據庫。 在每個對display_customer_transaction.cgi的CGI請求中,我的腳本都會

  1. 跨網絡開放數據庫連接
  2. 使用SQL語句對數據庫執行查詢
  3. 分析從數據庫檢索的數據
  4. 以HTML格式打印數據
  5. 關閉數據庫連接

經過一些分析后,我意識到步驟(1)是瓶頸。 因此,我希望避免為每個CGI請求打開和關閉數據庫連接。 我的願望是,如果我的第一個CGI請求打開了一個數據庫連接,那么我的第二個傳入CGI請求(來自不同的客戶端)可能會重用第一個數據庫連接。

我曾嘗試在Google上進行“ DBIX持久數據庫連接”,但幾乎找不到相關結果。 (編輯:那是因為它被稱為DBIC或DBIx :: Class,而不是DBIX。)

我進一步使用Apache :: DBI查找相關信息(但是,我的意圖是在DBIX上,而不是Apache :: DBI)。 有一些信息使我感到困惑:

Apache :: DBI模塊仍然有一個局限性:它可以在每個進程的基礎上保持數據庫連接的持久性。

一直以來,我對Apache如何滿足CGI請求的看法是

  1. Apache將始終產生一個新進程來處理傳入的新CGI請求。 每當Perl解釋器完成執行Perl腳本時,該過程將終止。

因此,如果Apache :: DBI模塊只能在每個進程的基礎上保持數據庫連接的持久性,那么我的第二個CGI請求如何重新使用第一個CGI請求打開的連接呢?

但是回到我原來的問題。 如何在mod_perl中建立DBIX持久數據庫連接?

注銷之前,請嘗試Apache :: DBI。 但是,您還希望使CGI腳本具有持久性。 如果您現在擁有香草CGI程序,則可以使用PerlRun或PerlRegistry選項使它們持久化。 那應該和Apache :: DBI一起完成。 當然,每個子進程都有DBI連接,但這並不是不合理的。

在放棄之前先嘗試一下。 :)

Apache :: DBI改變了DBI模塊的工作方式。 假設您使用的是DBIx :: Class(還不夠具體),那么它將使用DBI模塊來獲取其DB連接,因此這將對您有用。

當您使用mod_perl(並假設您的mod_perl設置正確)時,Perl解釋器將加載到Apache中,而程序將被加載到Apache中。 Apache運行數量有限的進程來處理請求-每個進程都處理一個以上的請求。

Apache進程最終會死掉並重新生成,但是在此之前,它們會處理許多請求。 這些是Apache :: DBI文檔所引用的過程。 它試圖說“您將一遍又一遍地重復使用同一連接,但這並不意味着一次只能打開一個連接”。

最后,根據我的每秒連接數非常低的判斷,我此時未使用持久連接。 對於性能擴展計划,我寧願使用DBIx +內存緩存解決方案。

暫無
暫無

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

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