0

Ich bin auf der Suche nach einer Lösung für was scheint ein komplexes Problem sein. Grundsätzlich muss ich den schnellsten und zuverlässigsten Weg finden, um eine "Master" -Datenbank (ein System von Datensätzen) basierend auf Daten von mehreren anderen "verteilten" Datensystemen zu erstellen. Lassen Sie mich das Problem aufschlüsseln: Ich habe N System von Datensätzen, die jeweils einen Web Service angeschlossen haben und auf Anfragen nach Daten reagieren. Jeder der N Webdienste hat das Antwortobjektschema standardisiert, sodass das XML/JSON-Antwortdatenschema für jeden Webdienst genau gleich ist. Die Mission besteht darin, eine einzige "Master" -Datenbank zu erstellen, die das N-System der Datensätze auf dem schnellsten Weg widerspiegelt. (Im Prinzip eine Zusammenführung aller N Datenbanken periodisch durch eine Prozedur/Anwendung/Programm/etc.).Wie replizieren/verschmelzen mehrere System von Datensätzen Datenbanksystemen in einem Master-System von Datensätzen

Die einzige Möglichkeit, die Daten von jedem "verteilten" System von Datensätzen zu erhalten, besteht in der Interaktion mit den entsprechenden Webdiensten. Dies ist der weltweite Standard, der von allen N-Systemen der Eigentümer von Musiktiteln vereinbart wurde.

Was ist der effizienteste Weg, um dieses Problem anzugehen?

Dies ist ein Ansatz, der in Betracht gezogen wurde, aber ich denke, dieser Ansatz nicht optimal ist: ein C# Programm erstellen, die gleichzeitig werden/asynchrounously Daten verlangen von jedem des Web-Service, und diese Daten in eine Staging-Umgebung eindrücken SQL Server. SQL Server würde dann Prozeduren ausführen, um diese Daten in eine master-Datenbank zusammenzuführen (Zurzeit würde dies 17 Stunden dauern.)

Hier ist eine grundlegende Zeichnung der beweglichen Teile, die "??" in der Mitte steht für die Lösung Here is a basic drawing of the moving parts, the "??" in the middle represents the solution

+0

Ihr Ansatz scheint gut, aber Ihre Frage fehlt einige Details. Sie haben geschrieben, dass dieser Ansatz etwa 17 Stunden dauert. Wie viele Datensätze werden in dieser Zeit übertragen? Wo sind die Flaschenhälse? Wie senden Sie die Datensätze an Ihren Haupt-SQL-Server? –

+0

Hi Zohar, Der Ansatz, den ich benutze funktioniert, aber scheint mir nicht optimal zu sein. Ja, in den 17 Stunden werden ca. 159273 Datensätze in der Datenbank gespeichert. Der größte Engpass bei der derzeitigen Lösung besteht darin, dass Anfragen an Web-Services pro Anfrage ein paar Sekunden dauern. Daher beträgt die Gesamtverarbeitungszeit etwa 17 Stunden. Ich kann TPL Task Parallel Library in C# verwenden, um mehrere Threads für die Anfragen zu verwenden, aber ich habe immer noch das Gefühl, dass die Lösung komplizierter ist, als sie sein muss. Was denken Sie? Wiederum ist das Ziel, die "Gesamtzeit für die Synchronisierung" zu minimieren. – joey

+0

Meine beste Lösung hierfür, ohne Warteschlangen und "konkurrierende Consumers" -Muster zu untersuchen, ist die Verwendung von Task Parallel Library, um alle URIs zu aggregieren, die angefordert werden müssen XML-Webdienste, erstellen Sie Aufgaben (möglicherweise gleichzeitig 100 Stück) und führen Sie die GET-Anforderungen parallel aus. Das würde die Zeit von 17 Stunden (Reihe von Anfragen) auf viel weniger reduzieren, vielleicht weniger als 2 Stunden (laufende Anfragen parallel) – joey

Antwort

0

Danke Zohar. Es stellt sich heraus, dass ich dieses Problem mit Task Parallel Library weiterhin angehen werde. Ich werde weiterhin Tasks verwenden, habe aber entschieden, einen Batch von Tasks (5-10) zu erstellen, die alle async ausführen und dann mit einer ConcurrentQueue für alle Web-URLs arbeiten. So kann ich die Zeit minimieren.

Es gibt definitiv einen guten Grund, sich auf die "Engpässe" zu konzentrieren, und jeder Webserver hat andere "Flaschenhalsraten" (mangels besserer Wörter). Ich werde meinen Algorithmus so konfigurieren, dass er eine Anzahl von Aufgaben erstellt, wobei N dem Web-Service zugeordnet und konfigurierbar ist. Wenn beispielsweise Webdienst 1 sehr leistungsfähig ist, erstelle ich weitere Aufgaben (Threads), um die Anforderungen parallel auszuführen. Vielen Dank.

Verwandte Themen