MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB+Azure+Android:com.mongodb.WriteConcernException Fehler:nicht Mastercode:10058

Wenn die Instanzen alle hinter einem einzigen Load-Balancing Input sitzen Endpunkt (z. B. 27017), dann wird jedes Mal, wenn sich Ihr Client-Computer mit dem Endpunkt verbindet, er mit möglicherweise anderen Knoten im Replikat-Cluster verbunden (und Sie hätten keine Kontrolle darüber, zu welcher Instanz Sie gegangen sind). Dies könnte erklären, warum Sie manchmal versuchen, auf den Nicht-Master zu schreiben und einen Fehler erhalten, aber alle Ihre Lesevorgänge funktionieren (da Sie wahrscheinlich den MongoDB-Cluster so eingerichtet haben, dass Lesevorgänge auf sekundären Knoten zugelassen werden).

Worker-Rollen unterstützen auch InstanceInput Endpunkte, die es Ihnen ermöglichen, einen nach außen gerichteten Portbereich festzulegen (z. B. 27017-27019), der einem einzelnen Port auf den Worker-Instanzen selbst zugeordnet wird (z. B. 27017). Wenn Sie dies tun, kann sich Ihre Client-App jetzt direkt mit allen drei Instanzen verbinden (27017, 27018, 27019). Viele Treiber unterstützen Replicaset-Verbindungen, sodass sie herausfinden können, welcher Knoten der Master ist, und alle Schreibvorgänge an ihn leiten. Ich weiß nicht, ob der Treiber, den Sie auf Android verwenden, Replikatsätze unterstützt. Wenn der Treiber keine Replicasets unterstützt, sollten Sie wahrscheinlich in Erwägung ziehen, eine API-Ebene einzurichten, die dann die gesamte Kommunikation mit der Datenbank übernimmt (eine allgemein empfehlenswerte Vorgehensweise, und Sie können sich die mobilen Dienste von Azure ansehen). eine schnelle Möglichkeit, dies zu implementieren).

Also ... wenn der Endpunkt Ihres Replikat-Clusters als Input konfiguriert ist , erklärt dies wahrscheinlich das Problem, das Sie sehen, das sich beheben lässt, indem Sie den Endpunkttyp auf InstanceInput ändern .