MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB+Azure+Android:com.mongodb.WriteConcernException err:non codice master:10058

Se le istanze si trovano tutte dietro un singolo Input con bilanciamento del carico endpoint (ad es. 27017), quindi ogni volta che la tua macchina client si connette all'endpoint, sarà connessa a nodi potenzialmente diversi nel cluster del set di repliche (e non avresti alcun controllo sull'istanza a cui sei andato). Questo potrebbe spiegare perché a volte tenti di scrivere sul non master e ricevi un errore, ma tutte le tue letture funzionano (poiché probabilmente hai configurato il cluster MongoDB per consentire le letture sui nodi secondari).

I ruoli di lavoro supportano anche InstanceInput endpoint, che consentono di impostare un intervallo di porte rivolto verso l'esterno (ad esempio 27017-27019), mappando su una singola porta sulle istanze di lavoro stesse (ad esempio 27017). In tal caso, l'app client può ora connettersi direttamente a tutte e tre le istanze (27017, 27018, 27019). Molti driver supportano le connessioni del set di replica, quindi sarebbe in grado di capire quale nodo è il master, indirizzando su di esso tutte le scritture. Non so se il driver che stai utilizzando su Android supporta i set di replica. Se il driver non supporta i set di repliche, probabilmente vorrai prendere in considerazione l'idea di creare un livello API che quindi esegua tutte le comunicazioni con il database (una buona pratica da seguire in generale, comunque, e puoi guardare i servizi mobili di Azure per un modo rapido per implementarlo).

Quindi... se l'endpoint del tuo cluster di replicaset è configurato come Input , questo probabilmente spiega il problema che stai riscontrando, che dovrebbe essere risolvibile cambiando il tipo di endpoint in InstanceInput .