簡體   English   中英

MongoDB最佳性能 - 多少持久連接

[英]MongoDB Optimal Performance - How Many Persistent Connections

我在EC2實例上有一個mongodb服務器。 根據mongodb官方文檔,持久數據庫連接應始終用於生產。 我一直在試驗大約50個持久連接,並且在測試時遇到頻繁的連接錯誤(大約33%的時間)。 我正在使用此代碼:

$pid = 'db_'.rand(1,50);
$mongo = new Mongo("mongodb://{$user}:{$pass}@{$host}", array('persist' => $pid) );

關於應用程序的一些背景知識,它是一個仍然在增加的鏈接跟蹤應用程序 - 並且在每小時500到1k的寫入范圍內,沒有什么太瘋狂......

我想知道我是否只需要允許更持久的連接? 如何確定持久連接與可用服務器資源的正確平衡?

在此先感謝大家。

從最新的驅動程序(1.2.0)開始, 不再支持 persist值。

事實是,在典型的Apache + PHP設置中,它從未真正清楚它的作用。 關於Google網上論壇和其他地方有幾條評論要求詳細信息,但我沒有任何證據證明persistpersistent有任何深度測試。

相反,它已被“開箱即用”的連接池所取代。 通過添加MongoPool類,連接池顯然已經在1.2行內進行了一些更改

仍然沒有關於池如何與Apache一起工作的詳細解釋,但至少你不必擔心persist

盡管存在這些混亂,但我通過PHP驅動程序在單個MongoDB服務器上處理了1000次流量,而沒有很多連接問題。

你是否抓住了例外情況?

你能提供關於確切例外的更多細節嗎?

可能存在代碼解決方案。

您是為每個PHP頁面請求打開一個新連接,還是使用具有50個持久連接的連接池? 如果您每次都打開一個新連接,那么您可能很快就會耗盡資源。

每個連接在服務器上使用一個額外的線程,因此您可以限制網絡連接的線程數,檢查/var/lib/mongodb服務器日志是否有錯誤。

如果您正在使用官方MongoDB PHP驅動程序 ,那么據我所知它應該自動為您處理連接池。 如果你從50個獨立的客戶端連接到Mongo,那么考慮在Mongo前面放一個隊列來緩沖寫入。

http://php.net/manual/en/mongo.connecting.php

沒有持久連接x1000

執行大約需要18秒

一貫

......它需要不到0.02秒

暫無
暫無

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

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