Anstatt direkt auf Stack-Overflow zu lümmeln möchte ich der deutschen Community mal ne Chance geben. In einem meiner Projekte geht es darum mehrere Millarden Zeilen an Relationalen Daten zu laden, lokal in einer DB zu speichern und dann in die Cloud zu laden.

  • Nein wir haben keinen Zugang zum Azure Backbone
  • Ja, traffic ist aktuell ein Problem aber nicht das Akute

Nun haben wir eine DB2 OnPrem und wir ich bisher in den Datagateways vorgegangen bin ist mit ORDER BY X OFFSET X FETCH FIRST X um die Datenmenge aufzuteilen und parallel abzuarbeiten.

Die o.g. Datenmenge von ein paar Milliarden setzen sich aus mehreren Tabellen zusammen, alle haben einen Primary Key. Jage ich nun eine Query mit Order-By über die Datenmenge, dauert das für 35k Datensätze ca. 2:15 Minuten.

Kurze Formel wegen dem Microbatching:

135 Sekunden * 256 (Microbratches) * 8 (Jobbatches) landen wir bei einer Ladezeit (READ ONLY) von ca. 76,8 Stunden.

Hat jemand von euch eine Idee, wie man das Problem angehend könnte?

Hier mein Lösungsansatz:

  1. Temptable der Quelle errichten, da ich auf die Quelle KEIN Lock setzen kann
  2. OrderBy weglassen und die physische reihenfolge des statischen Temptables als Faden für die Ingestion der Daten verwenden.

Mit dem Ansatz würde es nur ca. 12 * 256 * 8 Sekunden brauchen also 24.576 was durchaus akzeptabel wäre.

Für den Zukünftigen Real-Time Ansatz werden ohne hin in die Quellsysteme Events eingebaut, welche die eindeutige ID an die Gateways kommunizieren um die Daten in die Cloud zu transferieren. - Meiner Meinung nach der einzige Weg near-real-time in dieser Datenmenge zu realisieren (Gibts hier vielleicht alternative Vorschläge? - Ich kann ja nicht annehmen, dass jedes Quellsystem änderbar ist und ich möchte Insellösungen vermeiden)

Danke schonmal im Voraus :)

Grüße