Frage

Was sind einige gute Möglichkeiten für eine Organisation sind Schlüsseldaten über viele deparments und Anwendungen zu teilen?

Um ein Beispiel zu geben, lassen Sie sich sagen, dass es eine primäre Anwendung und Datenbank von Kundendaten zu verwalten. Es gibt zehn andere Anwendungen und Datenbanken in der Organisation, die diese Daten lesen und in Beziehung auf ihre eigenen Daten. Derzeit wird diese gemeinsame Nutzung von Daten durch eine Mischung aus Datenbank (DB) Links erfolgt, materialisierte Views, Trigger, Staging-Tabellen, Re-Keying Informationen, Web-Service, etc.

Gibt es noch andere gute Ansätze Daten für den Austausch? Und wie vergleicht Ihre Ansätze zu den oben in Bezug auf Bedenken wie:

  • doppelte Daten
  • fehleranfällige Datensynchronisationsprozesse
  • fest gegen lose Kopplung (Abhängigkeiten / Brüchigkeit / Testkoordination reduziert)
  • Architektur Vereinfachung
  • Sicherheit
  • Leistung
  • gut definierte Schnittstellen
  • andere relevante Bedenken?

    Beachten Sie, dass die gemeinsame Kundendaten in vielerlei Hinsicht verwendet wird, von der einfachen, einzelnen Datensatz Abfragen bis hin zu komplexen, multi-Prädikat, Multi-Art, schließt sich mit anderen Datenorganisation in verschiedenen Datenbanken gespeichert.

    Vielen Dank für Ihre Anregungen und Ratschläge ...

        
  • War es hilfreich?

    Lösung

    Ich bin sicher, dass Sie sah dieses Kommen, „es kommt“.

    Es kommt darauf an alles. Und die Lösung Austausch Kundendaten für die Abteilung A kann für den Austausch von Kundendaten mit Abteilung B völlig unterschiedlich sein.

    Mein Liebling Konzept, das im Laufe der Jahre gestiegen ist, ist das Konzept der „Eventual Consistency“. Der Begriff stammt aus Amazon über verteilte Systeme zu sprechen.

    Die Prämisse ist, dass während des Zustand der Daten in einem verteilten Unternehmen nicht völlig im Einklang nun sein mag, es „schließlich“ sein wird.

    Zum Beispiel, wenn ein Kundendatensatz auf System A aktualisiert wird, die Kundendaten des Systems B ist jetzt abgestanden und passender nicht. Aber „schließlich“, wird der Datensatz von A nach B durch einen Prozess geschickt. Also, schließlich werden die beiden Instanzen entsprechen.

    Wenn Sie mit einem System arbeiten, haben Sie nicht „EC“, sondern Sie Instant-Updates haben, eine einzige „Quelle der Wahrheit“, und in der Regel einen Verriegelungsmechanismus Griff Rennbedingungen und Konflikte.

    Je mehr der Lage, Ihre Operationen der Lage sind, die Arbeit mit „EC“ Daten, desto leichter ist es, diese Systeme zu trennen. Ein einfaches Beispiel ist ein Data Warehouse durch den Verkauf eingesetzt. Sie nutzen die DW ihre tägliche Berichte laufen, aber sie laufen nicht ihre Berichte bis zum frühen Morgen, und sie schauen immer auf „Yesterdays“ (oder früher) Daten. So ist es kein wirklicher Zeitbedarf für die DW sein perfekt im Einklang mit dem täglichen Betrieb System. Es ist durchaus akzeptabel für ein Verfahren, bei laufen, sagen, in der Nähe der Geschäfte und die Tage Transaktionen rücken und Aktivitäten en masse in einem großen, einzigen Update-Vorgang.

    Sie können sehen, wie diese Anforderung eine Menge Probleme lösen können. Es gibt keine Konkurrenz für die Transaktionsdaten, keine Sorgen, dass einige Berichte Daten in der Mitte ändern werden die Statistik der Akkumulation, da der Bericht aus zwei separaten Anfragen an die Live-Datenbank. Keine Notwendigkeit, für das hohe Detail Geschwätz aufzusaugen Netzwerk und CPU-Verarbeitung usw. während des Tages.

    Nun, das ist eine extreme, vereinfacht und sehr grobe Beispiel EG.

    Aber ein großes System wie Google betrachten. Als Verbraucher von Suche, haben wir keine Ahnung, wann oder wie lange es ein Suchergebnis führt, dass Google erntet, wie auf einer Suchseite nach oben. 1ms? 1s? 10s? 10 Stunden? Es ist leicht zu Imaging, wie wenn man Googles West Coast Server treffen sind, können Sie sehr gut ein anderes Suchergebnis erhalten kann, als wenn man ihre Ostküste Server getroffen. Zu keinem Zeitpunkt sind diese beiden Instanzen vollständig konsistent. Aber durch große Maßnahme, sind sie meist konsistent. Und für ihren Anwendungsfall, ihre Verbraucher nicht wirklich durch die Verzögerung und Verzögerung betroffen.

    Betrachten Sie E-Mail. A will Nachricht an B senden, aber in dem Prozess wird die Nachricht durch das System C, D geleitet, und E. Jedes System der Nachricht übernimmt, übernimmt die volle Verantwortung für sie, und dann reicht es eine andere aus. Der Sender sieht die E-Mail unterwegs auf dem Weg. Der Empfänger nicht wirklich vermissen, weil sie sein Kommen nicht unbedingt wissen. So gibt es ein großes Zeitfenster, dass es für diese Nachricht zu bewegen durch das System, ohne dass jemand nehmen kann besorgt zu wissen, oder das Sorgen darüber, wie schnell es ist.

    Auf der anderen Seite, A war am Telefon mit B. könnte „Ich habe es gerade geschickt, hast du es noch bekommen? Jetzt? Jetzt? Holen Sie sich jetzt?“

    So gibt es eine Art zugrunde liegen, impliziten Leistungsniveau und Antwort. Am Ende "schließlich", übereinstimmt A der outbox B Posteingang.

    Diese Verzögerungen, die Akzeptanz von veralteten Daten, ob es ein Tag alt oder 1-5s alt, sind das, was die ultimative Verbindung Ihrer Systeme zu steuern. Je lockerer diese Anforderung, desto lockerer die Kupplung und die mehr Flexibilität, die Sie in Bezug auf Design zur Verfügung zu haben.

    Dies gilt bis auf die Kerne in der CPU. Modern, Multi-Core, Multi-Threaded-Anwendungen auf demselben System ausgeführt wird, können verschiedene Ansichten der „gleichen“ Daten haben, nur Mikrosekunden veraltet. Wenn Ihr Code korrekt mit Daten Potentia arbeitenlly unvereinbar miteinander, dann glücklicher Tag, Reißverschlüsse entlang. Wenn nicht Sie besondere Aufmerksamkeit schenken müssen Ihre Daten, um sicherzustellen, ist völlig im Einklang, Techniken wie flüchtigen Speicher qualifiziert, oder Verriegelungs Konstrukte usw. All das, in ihrer Art und Weise, Preis-Leistungsverhältnis.

    Also, das ist die Basis Betracht. Alle anderen Entscheidungen beginnen hier. Die Beantwortung dieser kann Ihnen sagen, wie man Partition Anwendungen in Maschinen, welche Ressourcen gemeinsam genutzt werden, und wie sie gemeinsam genutzt werden. Welche Protokolle und Techniken zur Verfügung, um die Daten zu bewegen, und wie viel wird es im Hinblick auf Kosten für die Verarbeitung der Übertragung durchzuführen. Replikation, Lastverteilung, Datenanteile, etc. etc. Alle basieren auf diesem Konzept.

    Bearbeiten, in Reaktion auf ersten Kommentar.

    Richtig, genau. Das Spiel hier, zum Beispiel, wenn B keine Kundendaten ändern, was ist dann der Schaden mit geändertenen Kundendaten? Können Sie „Risiko“ ist es für kurze Zeit mehr aktuell? Vielleicht Ihre Kundendaten kommen langsam genug, dass man es von A nach B sofort replizieren kann. Sprich wird die Änderung auf einer Warteschlange gestellt, dass wegen des geringen Volumens leicht aufgenommen wird (<1 s), aber auch noch wäre es „aus Transaktion“ mit der ursprünglichen Änderung sein, und so ist es ein kleines Fenster, in der A hätte Daten, dass B nicht.

    Jetzt ist der Geist wirklich beginnt Spinnen. Was während dieser 1s von „Verzögerung“ der Fall ist, was ist das schlimmstmögliche Szenario. Und können Sie um ihn herum konstruieren? Wenn Sie ein 1s Verzögerung Ingenieur um können, können Sie in der Lage sein, eine 5s, 1m Ingenieur um oder sogar mehr Verzögerung. Wie viel der Kundendaten verwenden Sie tatsächlich auf B? Vielleicht ist B ein System, Kommissionierung aus dem Inventar zu erleichtern. Kaum vorstellbar, etwas mehr notwendig als nur eine Kundennummer und vielleicht ein Name. Nur etwas zu grob zu ermitteln, wer den Auftrag für ist, während es montiert ist wird.

    Das Kommissioniersystem muss nicht unbedingt alle der Kundeninformationen bis zum Ende des Kommissioniervorgang auszudrucken, und dann die Reihenfolge auf ein anderes System bewegt hat, dass vielleicht mehr Strom mit, vor allem, Versand Informationen, so dass am Ende des Kommissioniersystem nicht brauchten kaum Kundendaten überhaupt. In der Tat könnte man EMBED und denormalize die Kundeninformationen innerhalb des Kommissionierauftrag, so gibt es keine Notwendigkeit oder Erwartung später zu synchronisieren. Solange die Kunden-ID korrekt ist (die ohnehin ändern wird nie) und der Name (die es so selten ändert nicht der Rede wert), das ist die einzige wirkliche Referenz, die Sie brauchen, und alle Ihre Pick rutscht sind absolut genau zum Zeitpunkt der Schöpfung.

    Der Trick ist, die Mentalität, der die Systeme bis zu brechen und sich auf die wesentlichen Daten zu konzentrieren, die für die Aufgabe erforderlich ist. Daten, die Sie nicht brauchen, muss nicht repliziert oder synchronisiert werden. Leute scheuern an Dingen wie Denormalisierung und Datenreduktion, vor allem, wenn sie aus der relationalen Datenmodellierung Welt sind. Und das mit gutem Grund, es sollte mit Vorsicht betrachtet werden. Aber sobald Sie verteilt gehen, haben Sie implizit denormalized. Heck, Sie kopieren es Großhandel jetzt. So können Sie auch etwas schlauer es.

    All dies kann durch festes Verfahren gemildert und gründliches Verständnis des Workflow. Identifizieren Sie die Risiken und aufzuarbeiten Politik und Verfahren, sie zu behandeln.

    Aber der schwierige Teil am Anfang der Kette an die zentrale DB bricht, und Anweisen Leute, dass sie nicht „haben sie alle“, wie sie erwarten können, wenn Sie einen einzelnen haben, zentral, perfekt Shop von Informationen.

    Andere Tipps

    Dies ist definitiv nicht um eine umfassende Antwort. Sorry, für meine lange Post und ich hoffe, es fügt Gedanken, die hier vorgestellt werden würden.

    Ich habe ein paar Bemerkungen zu einigen der Aspekt, dass Sie erwähnt.

    duplicate data
    

    Es ist meine Erfahrung, dass dies in der Regel eine Nebenwirkung von departmentalization oder Spezialisierung. Eine Abteilung Pioniere Erhebung bestimmter Daten, die als nützlich durch andere spezialisierte Gruppen gesehen wird. Da sie einen einzigartigen Zugang nicht auf diese Daten haben, wie es mit anderen Datensammlung, zu nutzen, um es verwirbelt wird, beginnen sie zu sammeln / Speichern der Daten, von Natur aus duplizieren zu machen. Dieses Problem geht nie weg und wie es eine kontinuierliche Anstrengung Code in Refactoring und Entfernen Vervielfältigung, besteht ein Bedarf an kontinuierlich doppelte Daten für die zentrale Zugriff, Speicherung und Änderung bringen.

    well-defined interfaces
    

    sind die meisten Schnittstellen definiert mit guter Absicht im Auge andere Beschränkungen zu halten. Allerdings haben wir einfach eine Gewohnheit, wächst aus den durch zuvor definierte Schnittstellen platziert Einschränkungen. Wieder ein Fall für Kontinuierlich Refactoring.

    tight coupling vs loose coupling
    

    Wenn irgend etwas, die meisten Software, die von diesem Problem geplagt. Die enge Kopplung ist in der Regel ein Ergebnis der zweckmäßigen Lösung der Einschränkung der Zeit wir gegeben gegenüber. Lose Kopplung entsteht ein gewisser Grad an Komplexität, die wir nicht mögen, wenn wir um Dinge zu erledigen wollen. Das Web-Services-Mantra hat für eine Reihe von Jahren Runden gegangen und ich bin noch ein gutes Beispiel für Lösung zu sehen, dass vollständig den Punkt mildert

    architectural simplification
    

    Für mich ist der Schlüssel alle Probleme zu kämpfen Sie in Ihrer Frage erwähnt haben. SIP vs H.323 VoIP-Geschichte kommt mir in den Sinn. SIP ist sehr vereinfacht, einfach zu bauen, während H.323 wie ein typisches Telefonstandard versuchte, jede Ausgabe auf dem Planeten über VoIP ins Auge zu fassen und eine Lösung dafür bieten. Endergebnis, SIP wuchs viel schneller. Es ist ein Schmerz H.323-konforme Lösung zu sein. In der Tat ist H.323 Compliance eine mega Buck-Industrie.

    On a few architectural fads that I have grown up to.
    

    Über Jahre habe ich begonnen, wie REST-Architektur für seine Einfachheit. Es bietet einen einfachen einzigartigen Zugang zu Daten und einfach zu bauen Anwendungen um ihn herum. Ich habe Enterprise-Lösung von Doppelarbeit, Isolierung und Zugriff von Daten als jedes andere Thema wie Leistung usw. REST mir bietet, um einige dieser Krankheiten ein Allheilmittel leiden mehr gesehen.

    eine Reihe dieser Probleme zu lösen, wie ich das Konzept des zentralen „Data Hubs“. Ein Data Hub stellt eine „einzige Quelle der Wahrheit“ für eine bestimmte Einheit, sondern nur IDs speichert keine Informationen wie Namen, etc. In der Tat, es speichert nur ID-Karten - zum Beispiel diese die Kunden-ID in System A Karte, auf dem Kundennummer vom System B und an die Kundennummer in System C Schnittstellen zwischen den Systemen verwenden, um die Nabe zu wissen, wie Informationen in einem System auf das andere beziehen.

    Es ist wie eine zentrale Übersetzung; stattdessen Code über spezifisch für das Mapping von A- von> B, A-> C und B> C, mit seinen Anwesenheits exponentiellen Anstieg, wie Sie mehr Systeme hinzuzufügen, nur zu konvertieren zu / von der Nabe müssen: A- > Hub, B-> Hub, C-> Hub, D-> Hub, etc.

    Lizenziert unter: CC-BY-SA mit Zuschreibung
    Nicht verbunden mit StackOverflow
    scroll top