2011-11-21 36 views
2

假設我有N臺服務器,每臺服務器作爲Web服務器和副本集的mongodb成員運行。Mongodb slaveOk - 首選服務器

我希望slaveOk讀取首先由本地mongodb實例滿意,而不是跨網絡的遠程計算機。

slaveOk讀取的文檔被任意成員滿足。是否有可能重寫呢?

Mongodb 1.8,C-sharp驅動程序1.2。

+0

我認爲使用標籤或與'cursor.readPref()](http://docs.mongodb.org/manual/reference/method/cursor.readPref/#cursor.readPref)'最近'可能是你是什麼之後.. – drevicko

回答

2

slaveOk讀取的文檔由任意成員滿足。是否有可能重寫呢?

不是不改變C#驅動程序。您可能不得不在this file的某個地方進行這些更改。

假設我有N個服務器,每個操作作爲一個Web服務器和一個副本集的一個成員的mongodb。

作爲說明,這通常不是MongoDB的預期用法。通過這種方式實現,您的Web服務器將與MongoDB競爭RAM。如果服務器負載過重,網絡服務器將癱瘓mongod進程,這將導致連接備份並加劇此問題。

這聽起來像你正在嘗試使用MongoDB作爲本地緩存,並有更好的工具來完成這項工作。

+0

感謝您的意見。並非真正用作本地緩存,只是爲了確保不必要的網絡調用可以避免,如果出於故障轉移原因數據恰好在本地。 – Nik

+0

這裏的問題Nik,往往是速度和記憶。如果您直接連接到本地服務器(繞過複製),那麼您的本地服務器將不得不提取實際數據。如果你的本地服務器在RAM中有這個功能,那麼速度很快,但是如果它不在RAM中,那麼你也可以使用網絡來讀取別人的內容。 –

+0

謝謝。在描述的配置中,它們都是Web服務器。所以它在另一臺機器的RAM中的機會與它在本地RAM中的相同,如果它們同樣負載平衡的話。 – Nik

0

最接近你所描述的是每個web應用程序打開一個單獨的直接連接(不是複製集模式)到本地mongodb並使用單獨的連接進行讀取。