2016-04-25 8 views
1

Stellen Sie sich eine große corp mit Dutzenden von Unternehmen, die jeweils mit ihrer eigenen Website und jede Website ihre eigenen einzigartigen funktionalen Anforderungen habenWie man mehrere Datenbanken strukturiert/koordiniert?

  • auf jeder Website Die meisten Daten werden

    • auf dieser Website spezifisch sein jede Website kann seine eigenen Daten
  • Einige Daten auf allen Websites geteilt wird bearbeiten

    • Es wird ein zentrales CMS sein, diese Daten zu bearbeiten ist erlaubt, aber auch andere Websites lesen und diese Daten verwenden,

z.B. sagen Sie, dass Sie die Infrastruktur für ein Unternehmen planen, das mehrere Subunternehmen besitzt, die verschiedene Arten von Produkten herstellen, einige in der gleichen Kategorie (Getreide, Lebensmittel), andere in ganz anderen Kategorien (Bücher, Instrumente). Einige sind Marketing-Websites, einige sind für CRM, einige Online-Shops sind

  • gibt es eine Liste der regulatorischen Anforderungen, die alle Produkte betreffen
  • jedes Unternehmen sollte den Stand der Einhaltung der eigenen Produkte für jede Anforderung verwalten
  • , wenn eine neue Anforderung Oberflächen, Details, die Anforderung in Bezug auf nur einmal

Wie würden die mehrere koordiniert werden Datenbanken eingegeben werden sollte?

edit: hinzugefügt mehr Informationen pro Bob Vorschläge

Vielen Dank für die unglaublich interessanten Fragen!

  • Compliance-Daten nicht mit anderen geteilt wird, silo'd innerhalb jeder Website
  • gemeinsam genutzten Daten nur auf der einen ist die unternehmensweite Datenbank, werden sie meist als „Arten von [Sache]“
  • keine abschließende Aufzählung von Instanzen, in denen sie verwendet werden, aber derzeit würden CMS-Dropdownlisten für einzelne Websites ausgefüllt.
  • Änderungen an gemeinsamen Daten würde ein paar Mal pro Jahr auftreten.
  • Ideale Änderungen würden innerhalb von ein paar Minuten widerspiegeln, aber eine Stunde oder so sollte akzeptabel sein
  • sehr geringe Lautstärke in gemeinsamen Daten.
  • Alle DBs werden neu sein, Entscheidung, für welche DB die laufende Untersuchung ansteht.
  • Sub-Systeme werden REST api
+1

Es wäre sehr hilfreich zu wissen, wie sich die beiden Listen zusammenfügen: Werden die Compliance-Daten geteilt oder nicht? Welche Daten werden geteilt (abgesehen von möglichen Compliance-Daten) und wofür wird es verwendet? Wie oft ändert es sich? Wie schnell und zuverlässig müssen die Änderungen an allen Stellen, an denen die geteilten Daten benötigt werden, gesehen werden? Welches Datenvolumen erwarten Sie im Veränderungsprozess? Existieren diese Datenbanken bereits? Sind sie (oder müssen sie, wenn sie nicht existieren) die gleiche Art von Datenbank, z. SQL Server/MySQL usw.? Gibt es von den Subsystemen APIs? –

+0

Danke für die unglaublich aufschlussreichen Fragen! Compliance-Daten werden nicht geteilt, gemeinsame Daten sind nur für die eine unternehmensweite Datenbank, sie werden meistens "Arten von [Sache]" sein, keine abschließende Liste von Instanzen, in denen sie verwendet werden, aber gegenwärtig wäre es CMS zu füllen Dropdowns für einzelne Websites. Es würde sich ein paar Mal pro Jahr ändern. Idealerweise würden sich Änderungen innerhalb weniger Minuten widerspiegeln, aber eine Stunde oder so sollte akzeptabel sein. Sehr geringe Lautstärke in freigegebenen Daten. Alle DBs werden neu sein, Entscheidung über die laufende Untersuchung. Subsysteme werden REST api freilegen – CheapSteaks

+0

Ich habe die Fragen nicht abgeschlossen ;-). Würden die geteilten Daten in den gleichen Strukturen in den verschiedenen Subsystemen gespeichert oder könnten sie anders gespeichert werden? Haben Sie einen Hausstil/mehr interne Fähigkeiten in der Programmierung oder in Datenbanken? Ist der Satz von Untersystemen bereits aneinander gebunden, z.B. über einen gemeinsamen Nachrichtenbus? Sind die Subsysteme netzwerknah? Das Problem, das Sie beschreiben, scheint eine ziemlich kleine Synchronisation zu sein - geringe Lautstärke, nicht oft, unchanging Latenzanforderungen, Konsistenz ist nicht zu beschwerlich. –

Antwort

1

Ich stimme Chris zu, dass es auch nach den beiden Fragen noch eine Menge möglicher Lösungen gibt. Zum Beispiel, wenn die Datenbanken die gleiche Technologie sind und die gemeinsamen Daten auf die gleiche Weise in jedem gespeichert werden, können Sie eine Replikation auf Datenbankebene von der zentralen Datenbank zu den anderen durchführen. Ist es in Ordnung, zwei separate dbs pro Anwendung zu haben (eine mit gemeinsamen Sachen und eine mit nicht-geteilt?) - dies würde die Art der Replikation beeinflussen.

Oder Sie könnten eine reine Codelösung haben, wo klicken auf in einer GUI veröffentlichen, die die zentrale DB aktualisiert ruft eine Reihe von APIs, die auch die anderen dbs aktualisieren. Oder micro-services - das Aktualisieren der zentralen db erstellt auch eine Nachricht in einer gemeinsam genutzten Warteschlange, die von Diensten übernommen wird, die jeweils nach einer anderen db suchen und die Aktualisierungen in irgendeiner Form anwenden, die für diese db sinnvoll ist.

Es hängt (unter den bereits erwähnten) davon ab, was die Technologiestrategie Ihrer Organisation ist, welche Technologie und Fähigkeiten Sie bereits intern besitzen und so weiter.

Das ist also genauso eine Architekturfrage wie eine DB-Frage.

+0

Danke! db-level Replikation und 2 separate dbs klingt ansprechend. Gibt es einen Namen für alles, was die Anwendung (oder db?) Tun müsste, um die Daten für Endbenutzer zu normalisieren? – CheapSteaks

+0

Was meinen Sie mit Normalisierung der Daten für Endbenutzer? –

+0

Sorry - SO hat meinen Kommentar gesperrt, so dass ich ihn nicht bearbeiten konnte. Wenn Sie "kopieren" meinen, wird dies oft als Replikation oder Synchronisation bezeichnet. Zum Beispiel in MySQL: http://dev.mysql.com/doc/refman/5.7/de/replication.html –

1

Ich glaube nicht, dass diese Frage hinreichend klar ist, eine einzige Antwort zu bekommen aussetzen. Es gibt jedoch ein paar Möglichkeiten.

In vielen Fällen, in denen Sie Daten freigegeben haben, möchten Sie einen einzigen Eigentümer dieser Informationen haben.Es könnte in einer Datenbank, in einer Excel-Datei (die dann in csv umgewandelt werden kann und periodisch auf alle dbs geladen werden kann) oder in einer anderen Form vorliegen. Die Einzelheiten hängen davon ab, was genau geteilt wird.

Jetzt klingt es so, als ob Sie irgendeine Art von Rechtsabteilung haben, die für einige gemeinsame Informationen zuständig ist, und sie werden diese Daten verwalten, die dann an die anderen Seiten weitergegeben werden. Dies kann mit einer Anwendung geschehen, die sie verwalten, die Informationen von den anderen Firmen sammelt, oder es könnten Daten sein, die auf ihre Systeme übertragen werden.

Ein letzter Punkt:

Software ist am besten, wenn es menschliche Lösungen für menschliche Probleme erleichtert, nicht, wenn es diese Probleme direkt zu lösen versucht. In diesen Fällen möchten Sie wahrscheinlich eine gute menschliche Lösung an Ort und Stelle und dann schauen, was Software tun kann, um das zu unterstützen. Viele der Probleme (wem gehört die Information?) Wurden bereits gelöst und Sie automatisieren einfach was bereits erledigt ist.

2

Hier sind einige Möglichkeiten, die ich gesehen habe dies behandelt, müssen Sie über die Auswirkungen der einzelnen Struktur auf der Grundlage der Details Ihrer bestimmten Geschäftsdomäne denken. Alle können funktionieren, aber alle müssen sorgfältig eingerichtet werden, wenn sie zur Arbeit gehen.

Eine Datenbank für gemeinsame Informationen und eine für jeden Client für kundenspezifische Informationen. Richten Sie die gesamte Anwendung so ein, dass das erste, was Sie beim Anmelden in die Anwendung eingeben, der Client ist und eine Verbindung zum richtigen Client hergestellt wird. Möglicherweise müssen die Benutzer auch eine Möglichkeit haben, den Client zu ändern, wenn Benutzer mit mehreren Benutzern arbeiten.

Trennen Sie die Server für jeden Client, wenn sie vollständig gelöscht werden müssen. Datenbankänderungen erfolgen per Skript (und in der Quellcodeverwaltung) und werden bei Bedarf auf jeden Server angewendet. So haben die Änderungen in der zentralen Datenbank möglicherweise einen Job, der ausgeführt wird, um alle Datenänderungen auf die anderen Server zu übertragen. Stellen Sie jedoch sicher, dass jede Tabelle über eine client_id verfügt, damit die Daten immer korrekt gefiltert werden Klient. Sie können separate Ansichten nach Client einrichten, sodass die Benutzer nur die Clients sehen können, die sie sehen sollen. Dies funktioniert nur, wenn die Daten für jeden Client im Wesentlichen in derselben Form sind.

Und da Sie sich in einer regulatorischen Umgebung befinden, empfehle ich dringend, dass Sie eine Überwachungsdatenbank erstellen, die durch Datenbankauslöser für jede Datenbank aktualisiert wird (nie von der Anwendung aus überwachen, Sie werden Änderungen an den Daten verlieren).

+0

Vielen Dank für den Rat! Das regulatorische Beispiel war nur ein Beispiel für die Art von Datenstruktur, die wir haben könnten, aber das Auditing in Betracht zu ziehen ist definitiv eine gute Idee – CheapSteaks

Verwandte Themen