3 Stimmen

Was ist der beste Ansatz für ein entkoppeltes Datenbankdesign im Hinblick auf die gemeinsame Nutzung von Daten?

Ich habe eine Reihe von Oracle-Datenbanken, die auf die Daten der anderen zugreifen müssen. Die effizienteste Art, dies zu tun, ist die Verwendung von Datenbankverknüpfungen - wenn ich ein paar Datenbankverknüpfungen einrichte, kann ich mit einem Minimum an Aufwand Daten von A nach B bringen. Das Problem für mich ist, dass man am Ende ein eng gekoppeltes Design hat, und wenn eine Datenbank ausfällt, können die gekoppelten Datenbanken mitgerissen werden (oder vielleicht ein Teil einer Anwendung auf diesen Datenbanken).

Welche alternativen Ansätze haben Sie für die gemeinsame Nutzung von Daten zwischen Oracle-Datenbanken ausprobiert?

Update nach ein paar Antworten...

Ich dachte nicht so sehr an eine Replikation, sondern eher an den Zugriff auf "Stammdaten". Wenn ich zum Beispiel eine zentrale Datenbank mit Währungsumrechnungskursen habe und einen Kurs in eine separate Datenbank (Anwendung) ziehen möchte. Für solch einen kleinen Datensatz würde der Vorschlag von igor-db mit materialisierten Ansichten über DB-Links wunderbar funktionieren. Wenn Sie jedoch dynamisch Stichproben aus einem sehr großen Datensatz ziehen, wird die Option der lokalen Zwischenspeicherung immer schwieriger. Für welche Optionen würden Sie sich unter diesen Umständen entscheiden? Ich habe über einen XML-Dienst nachgedacht, aber tuinstoel (in einem Kommentar zur Antwort von le dorfier) hat zu Recht den damit verbundenen Overhead in Frage gestellt.

Zusammenfassung der Antworten...

Im Großen und Ganzen denke ich, dass igor-db am nächsten dran ist, weshalb ich diese Antwort akzeptiert habe, aber ich dachte, ich füge noch etwas hinzu, um einige der anderen Antworten hervorzuheben.

Für meine Zwecke, bei denen ich nur die Datenreplikation betrachte, sieht es so aus, als ob die Oracle BASIC-Replikation (im Gegensatz zur ADVANCED-Replikation) die richtige für mich ist. Die Verwendung von materialisierten Ansichtsprotokollen auf der Master-Site und materialisierten Ansichten auf der Snapshot-Site scheint eine hervorragende Lösung zu sein.

Wo dies nicht möglich ist, z. B. wenn das Datenvolumen eine vollständige Tabellenreplikation unmöglich macht, scheint eine Messaging-Lösung die geeignetste Oracle-Lösung zu sein. Oracle Advanced Queueing scheint der schnellste und einfachste Weg zu sein, eine Messaging-Lösung einzurichten.

Der am wenigsten zu bevorzugende Ansatz scheint die Entwicklung eigener XML-Webdienste zu sein, allerdings nur dann, wenn die relative Einfachheit von Advanced Queueing nicht in Frage kommt.

5voto

Gary Myers Punkte 34373

Streams ist die Oracle-Replikationstechnologie. Sie können MVs über Datenbankverknüpfungen verwenden (d.h. Datenbank "A" hat eine materialisierte Ansicht der Daten aus Datenbank "B". Wenn "B" ausfällt, kann die MV nicht aktualisiert werden, aber die Daten sind immer noch in "A").

Der Kilometerstand kann vom DB-Volumen, dem Wechselvolumen... abhängen.

1voto

dkretz Punkte 36862

Es sieht für mich so aus, als ob es per Definition eng gekoppelt ist, wenn Sie gleichzeitig synchronen Zugriff auf mehrere Datenbanken benötigen.

Wenn es z. B. um die Übertragung von Daten geht und diese asynchron erfolgen kann, können Sie eine Nachrichtenwarteschlange zwischen den beiden installieren und zwei Prozesse einrichten, von denen einer von der Quelle liest und der andere in die Senke schreibt.

1voto

tuinstoel Punkte 7244

Der Auftraggeber hat weitere Informationen geliefert. Er erklärt, dass der Datensatz sehr groß ist. Nun, wie groß ist groß? Und wie oft werden die Master-Tabellen geändert?

Bei der Verwendung von materialisierten Ansichtsprotokollen überträgt Oracle nur die in der Master-Tabelle vorgenommenen Änderungen. Eine vollständige Aktualisierung der Daten ist nicht erforderlich. Oracle Streams übermitteln auch nur die Änderungen an die andere Seite.

Der Kauf von Speicherplatz ist billig, warum also nicht lokales Caching? Viel billiger als eigene Lösungen zu programmieren.

Ein XML-Dienst hilft Ihnen nicht, wenn seine Datenbank nicht verfügbar ist, also verstehe ich nicht, warum er helfen sollte. Oracle hat viele Optionen für die Replikation, erkunden Sie sie.

bearbeiten

Ich habe xml-Dienste entwickelt. Sie bieten Interoperabilität zwischen verschiedenen Systemen mit einer klaren Schnittstelle (Vertrag). Sie können einen XML-Dienst in C# erstellen und den Dienst mit Java konsumieren. Allerdings sind Xml-Dienste nicht schnell.

1voto

Warum nicht Advanced Queuing verwenden? Warum sollten Sie einen eigenen XML-Dienst entwickeln, um Nachrichten (DML) zwischen Oracle-Instanzen zu übertragen - er ist bereits vorhanden. Sie können Nachrichten durch Propagation von einer Instanz zur anderen verschieben lassen, wenn beide Instanzen in Betrieb sind. Sie können sie nach Bedarf auf den Zielservern verarbeiten. AQ ist wirklich recht einfach einzurichten und zu verwenden.

1voto

Warum müssen es getrennte Datenbanken sein?

Eine einzige Datenbank/Instanz mit mehreren Schemata könnte einfacher sein.

Es ist einfacher, eine Datenbank aufrechtzuerhalten (mit entsprechenden Standby-Datenbanken usw.), als N Datenbanken aufrechtzuerhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X