2017-07-17 1 views
1

Ich baue eine Meteor Web API mit dieser lib, und eine der Funktionen der Web-API ist, dass es in der Lage sein muss, eine von mehreren Datenbanken basierend auf einem Web-Anfrage von einem Meteor-Client.Meteor Server-only Web App verbindet zu mehreren Datenbanken

.

Ich verstehe es jetzt möglich ist, um mehrere Datenbanken von einem Server Side Nur Meteor Anwendung von dieser SO beantworten (Using Multiple Mongodb Databases with Meteor.js) zu verbinden:

Es ist nun möglich, remote/mehrere Datenbanken zu verbinden:

var database = new MongoInternals.RemoteCollectionDriver("<mongo url>"); 
MyCollection = new Mongo.Collection("collection_name", { _driver: database }); 

Doch funktioniert das, funktioniert es, wenn Sie die gleichen Sammlungsnamen in beiden Datenbanken haben? Die Datenbanken sind grundsätzlich Replikate, natürlich mit verschiedenen MONGO_URLs und mit unterschiedlichen Daten.

.

Zum Beispiel:

(1) Eine Web-Anfrage von einem Client kommen würde, in die Meteor Web-API. Diese Anforderung würde Daten enthalten, die eine Datenbank-ID = 2 angeben. Ich würde diese ID nachschlagen und sie mit einer Datenbank-URL abgleichen. Ich würde eine Verbindung zu dieser Datenbank herstellen und den Sammlungsnamen "People" abrufen und die Verarbeitung dieser Daten vornehmen.

.

(2) Eine weitere Webanforderung von einem anderen Client kommt in die Meteor Web API. Diesmal mit einer Datenbank-ID = 4, sucht die Web-App die Datenbank nach und stellt eine Verbindung zu einer anderen, anderen URL her, und holt den gleichen Sammlungsnamen "Leute" ein, aber dieses Mal hat sie natürlich andere Daten es ist eine andere Datenbank).

.

Kann dies mit den gleichen Sammlungsnamen funktionieren? Wenn ja, wie würde das funktionieren? Und wenn ich zwei Anfragen für zwei verschiedene Datenbanken gleichzeitig habe?

Ein Diagramm: enter image description here

Antwort

2

Sie sollten definieren, was ein "Kollektionsnamen" ist.

So in diesem Code:

const database = new MongoInternals.RemoteCollectionDriver("<mongo url 1>"); 
const MyCollection = new Mongo.Collection("collection_name", { _driver: database }); 

const database2 = new MongoInternals.RemoteCollectionDriver("<mongo url 2>"); 
const MyCollection2 = new Mongo.Collection("collection_name", { _driver: database2 }); 

Von Ihrer "Meteor App" Perspektive, MyCollection und MyCollection2 sind zwei verschiedene JavaScript-Konstanten und damit zwei verschiedene "Meteor Sammlungen". Basierend darauf, wie JavaScript funktioniert, können sie nicht gleich benannt werden.

Da sie jedoch mit zwei verschiedenen Datenbanken verbunden sind und verschiedene Datenbanken völlig unterschiedliche Dinge sind (sofern die beiden Mongo-URL-Strings nicht identisch sind), können ihre Namen für die "Datenbanksammlung" gleich sein. Sie sind immer noch zwei verschiedene Sammlungen in zwei verschiedenen Datenbanken.

Aus der Datenbankperspektive spielt Nebenläufigkeit auch keine Rolle. Sie können auf gleichzeitige Datenbankaufrufe reagieren, weil sie unterschiedliche Datenbanken sind.Ihr Javascript-Anwendungscode muss jedoch in der Lage sein, diese Nebenläufigkeit zu verwalten und deren Ergebnisse und Ausnahmen zu verarbeiten, da JavaScript nicht mit Threads, sondern mit Eventing-Elementen versehen ist.

Verwandte Themen