sql >> データベース >  >> NoSQL >> MongoDB

MongoDB + Azure + Android:com.mongodb.WriteConcernExceptionエラー:マスターコードではありません:10058

    インスタンスがすべて単一の負荷分散されたInputの背後にある場合 エンドポイント(例:27017)の場合、クライアントマシンがエンドポイントに接続するたびに、レプリカセットクラスター内の潜在的に異なるノードに接続されます(どのインスタンスに移動したかを制御することはできません)。これは、非マスターに書き込もうとしてエラーが発生することがあるのに、すべての読み取りが機能する理由を説明している可能性があります(おそらく、セカンダリノードでの読み取りを許可するようにMongoDBクラスターを設定しているため)。

    ワーカーロールはInstanceInputもサポートします エンドポイント。これにより、外部に面するポート範囲(27017〜27019など)を設定し、ワーカーインスタンス自体の単一のポート(27017など)にマッピングできます。これを行うと、クライアントアプリは3つのインスタンスすべてに直接接続できるようになります(27017、27018、27019)。多くのドライバーはレプリカセット接続をサポートしているため、どのノードがマスターであるかを把握し、すべての書き込みをそのノードに送信することができます。 Androidで使用しているドライバーがレプリカセットをサポートしているかどうかはわかりません。 ドライバーがレプリカセットをサポートしていない場合は、データベースへのすべての通信を行うAPI層を設置することを検討することをお勧めします(とにかく、一般的に従うことをお勧めします。Azureのモバイルサービスでこれを実装する簡単な方法)。

    つまり...レプリカセットクラスターのエンドポイントがInputとして構成されている場合 、これはおそらくあなたが見ている問題を説明しています。これはエンドポイントタイプをInstanceInputに切り替えることで解決できるはずです。 。




    1. PUGのデータベースからのデータの解析

    2. MongoDBは、集計を行うときに間違ったインデックスを選択しているようです

    3. 本番のmeteorjsデータベースを開発と同期するにはどうすればよいですか?

    4. MongoDB-時間範囲間のクエリ