2

MongoDB で読み取りをスケーリングしたい。これを行うには、マスター/スレーブ レプリケーションまたはレプリカ セットをセットアップできますが、Mongo への接続を次のように作成すると、次のようになります。

from pymongo import ReplicaSetConnection, ReadPreference
from pymongo.errors import ConnectionFailure

try:
    connection = ReplicaSetConnection("somehost:10000", replicaSet='myapp_repl',
                                  read_preference=ReadPreference.SECONDARY) 
except ConnectionFailure ...

また:

from pymongo.master_slave_connection import MasterSlaveConnection
from pymongo.errors import ConnectionFailure

try:
    master = Connection(host="somehost", port=10000)
    slave1 = Connection(host="somehost", port=10001)
    slave2 = Connection(host="somehost", port=10002)
    connection = MasterSlaveConnection(master, slaves=[slave1, slave2])
except ConnectionFailure ...

pymongoドライバーは、レプリカ セットのセカンダリ/スレーブ間でクエリを分散します。この状況では、プライマリ/マスターはクエリを処理しないため、2 つのノードがある場合、1 つのノードのみがクエリを処理するため、読み取り機能は強化されません。マスターとスレーブ (プライマリとセカンダリ) の両方でクエリを処理するにはどうすればよいですか?

4

1 に答える 1

1

これはちょっとしたハックですが:

connection = MasterSlaveConnection(master, slaves=[slave1, slave2, master)

ただし、MasterSlaveConnection は非推奨です。

これを修正する他の方法がわかりません。

新しい予備選挙で投票するためのシャーディングまたはアービターの追加を検討することをお勧めします: http://www.mongodb.org/display/DOCS/Adding+an+Arbiter

于 2012-04-24T13:28:45.940 に答える