J’ai un jeu de répliques mongodb à partir duquel je veux lire les données de la firebase database primaire et secondaire.
J’ai utilisé cette commande pour me connecter à la firebase database:
mongoose.connect('mongodb://user:[email protected],user:[email protected],user:[email protected]/PanPanDB?replicaSet=rs0&readPreference=nearest');
Cela ne fonctionne pas .. Mon application continue à lire à partir du primaire .. Toute suggestion s’il vous plaît?
Si vous souhaitez lire à partir d’un secondaire, vous devez définir votre préférence de lecture sur l’une des valeurs suivantes:
secondaryPreferred
– Dans la plupart des cas, les opérations sont lues à partir de membres secondaires, mais si aucun membre secondaire n’est disponible, les opérations sont lues à partir du membre principal.
secondary
– Toutes les opérations lues à partir des membres secondaires du jeu de réplicas.
Lire à partir du nearest
selon votre exemple sélectionnera le membre le plus proche en fonction du temps de ping (qui peut être le principal ou le secondaire).
Lorsque vous utilisez une préférence de lecture autre que primary
, vous devez être conscient des problèmes potentiels de cohérence pouvant affecter la logique de votre application. Par exemple, si vous lisez à partir d’un secondaire, il se peut que des modifications sur le principal n’aient pas encore été répliquées sur ce secondaire.
Si vous êtes préoccupé par une cohérence accrue lors de la lecture de données secondaires, consultez la documentation Write Concern for Replica Sets .
Étant donné que les secondaires doivent écrire les mêmes données que les données primaires, la lecture à partir des secondaires ne peut pas améliorer les performances, sauf si votre application est très chargée en lecture ou si tout va bien avec une cohérence éventuelle.
Suite à la documentation disponible sur le site Web MongoDB et sur le site Web Mongoose , vous pouvez append cette instruction pour configurer la ReadPreference sur Mongoose:
var opts = { replSet: {readPreference: 'ReadPreference.NEAREST'} };
mongoose.connect('mongodb://###:###@###:###/###', opts);
Ceci a été testé avec la version 3.8.9 de Mongoose
En plus de définir l’URI de la connexion (comme vous l’avez fait) et les options de connexion (comme le faisait Emas), je devais aussi explicitement choisir le serveur pour chaque requête, par exemple
var query = User.find({}).read("nearest"); query.exec(function(err, users) { // ... });
Le paquet de nœuds Mongoose utilise “mongodb”, la connexion uri ou opts est analysée par “mongodb”. Voici mongodb connect opts et le code source readPreference de mongodb .
Nous pouvons donc utiliser la mongoose comme ceci:
var opts = {db: {readPreference: 'nearest'}; mongoose.connect(uri, opts);
En outre, utilisez simplement uri comme ceci:
var uri = 'mongodb://###?readPreference=nearest'; mongoose.connect(uri, opts);
Dans Mangouste 4.3.4
ci-dessus prennent effet.
Vous pouvez simplement le faire en utilisant le code ci-dessous
var collection = db.collection(collectionName,{readPreference:'secondaryPreferred'});
http://p1bugs.blogspot.in/2016/06/scaling-read-query-load-on-mongodb.html