簡體   English   中英

如何在Perl / Mason網站上管理MongoDB連接

[英]How to manage MongoDB connections on Perl/Mason website

我正在嘗試與Mason在Perl中編寫一個網站。 我使用以下命令設置服務器:-Apache和具有Mason的mod_perl-CGI :: Session用於管理會話-MongoDB用於數據庫。

我擔心的是,每次我連接到MongoDB數據庫時,連接都會保持活動狀態,直到重新啟動httpd服務為止。 因此,如果達到最大連接數,我將無法打開連接。

有誰有辦法:

  • 要么關閉連接(這可能不是一個好主意)?
  • 要么擁有知道該體系結構的全局數據庫連接池?

只要您的MongoClient實例存在,MongoDB驅動程序就會使連接保持活動狀態。 在像mod_perl這樣的環境中,Perl解釋器是一個持久性進程,全局變量將一直徘徊直到被銷毀。

如果您不希望連接持久化,請創建一個MongoClient對象,該對象的作用域將在HTTP請求周期完成時結束。 當對象被垃圾收集時,連接將關閉。

如果您使用有關如何創建客戶端對象的更多詳細信息更新問題,則可以提供更詳細的答案。

我最近一直在與這個斗爭。 我想出了一個對我有用的非常簡單的解決方案。 它可能不是最好的,但似乎可以完美地完成工作。

我們將Mojolicious用作在apache2 / mod_perl下運行的API框架,並且發現新連接的建立速度比perl MongoDB驅動程序清除它們的速度更快,因為我們的網頁正在調用API來獲取新數據。

所以,我輸入一個簡單的...

use strict;
use warnings;
use MongoDB;

our $conn;

if(!defined($conn)){
  $log->info("Creating new DB connection");
  $conn =  MongoDB::MongoClient->new;
}
else{
  $log->info("DB connection already exists");
}

sub fetchData {
    # Do Mongo get/find stuff in here

    my $dbh = $mongoConn->get_database($db);
    my $collection = $dbh->get_collection($col);
    my $cursor = $collection->find($q)->fields($fieldsObj);
    my @result = $cursor->all;
    return @result;
}

顯然,我已經省略了錯誤捕獲功能,而其他不必要的操作則沒有必要,但是希望這可以幫助像我這樣的人尋求解決方案。

暫無
暫無

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

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