2016-05-31 3 views
0

Das Projekt, an dem ich arbeite, wird in mehreren "Räumen" eingesetzt. Jeder Raum hat seinen eigenen Server, auf dem eine Instanz von node.js läuft, und jeder Raum hat irgendeine Art von Datenspeicher. (Datenbank Geschmack ist noch nicht festgelegt).Benötigen Sie Ratschläge für die Struktur node.js/DB

Jeder Raum muss in der Lage sein, komplett auf sich selbst zu arbeiten ... wenn wir also 5 Räume haben und 4 Räume stillgelegt sind, sollte der letzte ohne die anderen weiterarbeiten können. Keine Probleme so weit ...

Der schwierige Teil ist, dass es einige gemeinsame Daten zwischen den Räumen ... Benutzerkonten zum Beispiel gibt. Wenn also ein Raum einen Benutzer hinzufügt, sollte sich dieser Benutzer in allen Räumen anmelden können.
Es wäre auch schön, wenn die node.js Fälle, wenn eine der anderen Zimmer benachrichtigt werden, um eine Änderung zu einer Aufzeichnung macht, so dass sie diese Daten ...

bei Bedarf nachladen

ich gesucht habe MongoDB-Replikatsätze, aber ich bin nicht davon überzeugt, dass dies die beste Lösung für mein Problem ist.

Ich habe auch über eine Lösung nachgedacht, wo jeder Raum für seine Datenbank verantwortlich ist, und aktualisiert sie, wenn eine andere node.js-Instanz ein Ereignis sendet, das einen neuen Benutzer signalisiert. Das Problem besteht darin, dass, wenn ein Raum für einen Tag offline war, er die während seiner Ausfallzeit vorgenommenen Änderungen nicht einholt.

Wir schauen hier nicht auf riesige Datenmengen ... irgendjemand hier mit ausreichend DB Wissen, um mich in die richtige Richtung zu weisen?

Antwort

1

Es ist nicht notwendig, dass jeder Raum über eine eigene Datenbank verfügt.

Was Sie suchen, ist eine einzige zentrale Datenbank zu haben, die SQL/NoSQL sein kann. Diese zentrale Datenbank kann auf mehreren Maschinen gruppiert werden, um Zuverlässigkeit, Verfügbarkeit, Datensharting, Lastausgleich und die vielen anderen Vorteile eines Datenbankclusters anstelle eines einzelnen Computers zu gewährleisten. Die Art und Weise, wie dies durchgeführt werden kann, ist für verschiedene Datenbanksysteme unterschiedlich. Es gibt viele da draußen: mysql, redis, postgresql und viele andere. Sie können sie ansehen.

Alle Ihre Knoteninstanzen würden von dieser zentralen Datenbank aus schreiben und lesen. Es wäre nicht notwendig, dass Instanzen sich gegenseitig benachrichtigen und ihre eigenen lokalen Datenbanken aktualisieren, wenn irgendwo ein neuer Benutzer hinzugefügt wird. Dies ist absolut nicht notwendig. In diesem Fall wäre es sogar möglich, wenn ein Knoten für einen Tag offline ist, auf alle neuen Daten von der zentralen Datenbank zuzugreifen, wenn er wieder online ist. Dies ist das Design, dem Sie folgen sollten.

Mehrere Datenbankinstanzen, eine für jeden Raum und die Implementierung einer Koordinationsebene auf Serverebene, ist eine Gesamtzahl von NOs. Diese Koordination sollte auf der Datenbankschicht selbst erfolgen und alle Serverinstanzen sollten in der Lage sein, die Datenbank zu kontaktieren, die wiederum konsistent und aktualisiert ist.

Ich hoffe, diese Antwort hilft Ihnen, Sie zu führen.

Verwandte Themen