Używam official node.js mongodb client do wykonywania zapytań Mongo kierowanych do klastra za pomocą ciągu połączenia podobnego do: mongodb://euwest1-01,euwest1-02,uswest2-01/dbname?replicaSet=mycluster&readPreference=nearest
. Jak widzisz, dołączam do mojego klastra kilka różnych lokalizacji geograficznych, a "najbliższy" powinien gwarantować odpowiednią replikę do pobrania.Pobierz instancję repliki użytą do zapytania mongo za pomocą node.js
Mimo to chciałbym się dowiedzieć, który z nich był użyty do wykonania zapytania, dzięki czemu mogę dołączyć do każdej z moich operacji log 'replikę mongo, która została użyta do wykonania zapytania.
Hacking wokół obiektu Cursor mogę dostać to, co chcę w hacky sposób:
const find = (query, callback) => {
let cursor = coll.find(query);
cursor.toArray((err, items) => {
console.log(cursor.server.ismaster.me);
callback(err, items);
});
};
Ale czuję się jak to można przerwać w dowolnym momencie, jak nie udokumentowano + wydaje się ograniczony do interakcji kursor (więc nie wiedziałbym, jak osiągnąć to samo dla metody findOne
).
Czy ktoś wie o czystej drodze do zrobienia tego?
Robi to od strony aplikacji wydaje się niewłaściwy sposób do mnie. Proponuję okresowo monitorować podłączonych klientów do każdego członka zestawu replik i alert w przypadku znalezienia klienta, który _ nie powinien należeć do listy klientów. Jednak sposób, w jaki działa "najbliższy", sprawia, że jest absolutnie możliwe, że klient z drugiego końca świata łączy się, ponieważ najbliższy oznacza w zasadzie "ten o najniższym opóźnieniu". Nie pamiętam jednak okresu, w którym ustalono opóźnienie. –