2016-11-10 122 views
1

我使用下面的代碼從PHP連接到我的mongoDB。這裏是我的本地主機的擴展信息,同樣在beta和prod上。 version statPHP中的MongoDB數據庫連接

我正在使用以下代碼連接到數據庫。

class WebAPI { 
    private $mongoClient; 
    function __construct() { 
     $mongoClient = new MongoDB\Client("mongodb://database.local:27017"); 
     if(!$mongoClient){ 
      //TODO: Inform status site about failure 
      http_response_code(500); 
      die(); 
     } 
     $statsDB = $mongoClient->stats; //selects database stats 
     $pageViewsCollection = $statsDB->pageviews; 
     $result = $pageViewsCollection->insertOne(PageViewInsights::getInfo()); 
     var_dump($result->getInsertedId()); 
    } 
} 

在SQL數據庫中,我們使用連接池。我懷疑mongodb也有一個,我不確定。我搜索了它,但這個新的mongodb 1.1.x版本沒有出現。

更好的方法來做到這一點?

UPDATE

正如所說的路易斯·愛德華多·德克里斯托here,我延長了更多的相關信息的問題。

如果連接池不相關,如何處理大量的連接?每個連接需要多少內存,假如我設法爲每個HTTP請求只使用一個連接,並且使用這個連接管理所有事務,例如我有一個8GB內存的服務器,CentOS或Ubuntu上的Hexacore Xeon E5 @ 3.1 GHz,單獨運行mongod而沒有像apache這樣的其他服務器,我可以創建多少個最大連接?我的服務器能夠處理多少個併發用戶?有什麼方法可以在MongoDB 3.2上優化它?

PS:沒有信息我能找到有關服務器配置的數據庫優化。

回答

1

你的代碼看起來不錯。關於池:

根據PHP手冊:

本節不再相關的1.3.0版本的驅動程序 的,只作爲對池 如何使用歷史信息工作。 「驅動程序的最新版本沒有任何池的概念 ,並且將保持每個進程只有一個連接,對於每個連接 類型(ReplicaSet/standalone/mongos),對於每個憑據 的組合。

http://php.net/manual/pt_BR/mongo.connecting.pools.php

最好的問候, 愛德華多。

+0

那麼我們如何管理巨大的連接量呢?有關於此的任何信息?或者這種方法是否有效? – Sibidharan

+0

也許在這種情況下,你不應該擔心更多關於你的基礎設施,然後你的代碼(因爲連接是由PHP管理的)?我能想到的就像使用Mongodb副本和簇和碎片一樣。請看看:(https://docs.mongodb.com/manual/replication/)和 http://stackoverflow.com/questions/17839962/persistent-connection-or-connection-pooling-in -php54-nginx-phpfpm -mongodb https://www.quora.com/How-should-I-set-up-mongodb-cluster-to-handle-20K+-simultaneous-connections – deChristo

+0

在這種情況下,罰款。我正在更新這個問題,以便進行連接管理和可以建立的最大連接。如果可以,請提供有關這方面的更多數據。 – Sibidharan