BigData - Milliarden Zeilen aus SQL Tables laden?

1 Antwort

Auch die deutsche Community tummelt sich bei Stackoverflow…

Ich verstehe noch nicht, was Du eigentlich willst. Willst Du eine gespiegelte Datenbank in der Cloud einrichten? Warum machst Du nicht einen simplen SQL-Dump? Warum nutzt Du nicht die DB2-Mechanismen zur Replikation?

Und warum machst Du ein Order by? Das dauert doch nur extra. Du schreibst, Du willst irgendwas parallel abarbeiten. Wozu? Komplette Spiegelung in nicht-Echtzeit -> SQL-Dump. Komplette Spiegelung in Echtzeit -> Replikationsmechanismen nutzen, dafür sind sie ja da.

Vergiss den Unsinn mit Events. Das können die SQL-Server selber. Hier für DB2: https://www.ibm.com/docs/en/db2/11.5?topic=options-replication-tools-by-component

HardPro 
Fragesteller
 27.07.2023, 05:05

Danke für den Tipp mit dem Dump, hast du hier Erfahrungen wenn es um Milliarden von rows geht?

orderby wird gemacht um die Reihenfolge pro batch zu sichern, da diese sich von SQL zu SQL Statement ändern könnte, habe hier schon an ein InBetween bei der ID gedacht.

das mit der Spiegelung über IBM bzw. mit den Replikationen ist so nicht gewünscht, es soll ein eigenes Tool sein, welches als Microservice skalierbar ist.

0
segler1968  27.07.2023, 05:37
@HardPro

Ein Dump ist genau dazu da, effizient die Daten abzuziehen. Und der geht so schnell wie möglich auch für beliebige Datenmengen.

Die Reihenfolge der Ergebnisse ändert sich nicht zufällig, sondern ist deterministisch. Solange Du das gleiche Select machst, wird sich in der Reihenfolge nichts ändern - wenn zwischenzeitlich keine Schreibvorgänge erfolgten. Aber daran würde Dein bisheriger Ansatz ja eh scheitern. Jedenfalls: Wenn Du ein Order By machst, dann natürlich nur auf ein Feld mit einem Index.

Die Spiegelungsmechanismen nicht zu verwenden, ist dumm und ineffizient. Die sind ja dafür optimiert und getestet. Aber wenn es unbedingt sein muss: Mache das nicht innerhalb des SQLs mit Events, sondern nutze das Transaction-Log des SQLs und arbeite die mit einem Microservice ab. Leider speichert das DB2 nur in einem Binärformat und dann ist dieser Weg etwas aufwändiger. Dafür bist Du dann nicht mehr auf die Performance des SQLs angewiesen und kannst das in einer eigenen VM machen. Aber es gibt auch Software von Drittanbietern, die das Transaction Log auswerten.

Wer auch immer bei Euch die Nutzung der Replikationsmechanismen nicht wünscht, sitzt auf dem falschen Posten. Es geht doch hier sicherlich um eine Produktivumgebung und nicht um eine Azubi-Spielwiese?

0
HardPro 
Fragesteller
 27.07.2023, 12:51
@segler1968

@segler1968 Hab mir das mal angeschaut, werde das Ganze mal benchmarken.

Die Reihenfolge der Ergebnismenge kann sich tatsächlich zwischen SELECTS ändern, da sich auch die Query in sich ändert (OFFSET etc.) Ist aber eh egal, wenn das über Dumps wirklich so zu realisieren ist... Sich hier also alleine auf die physikalische Reihenfolge zu verlassen ist keine Möglichkeit

So eine Entscheidung als Dumm zu betiteln halte ich für sehr mutig... Es hat durchaus valide und nachvollziehbare Gründe, warum unser Architekt das nicht möchte. - Das hier zu erläutern würde unnötig Zeit rauben, es ist wie es ist und so wird es gemacht, also ohne Spiegelungsmechaniken. Das near-real-time gedudel habe ich über das Backup-Logging der Datenbank realisiert.

Es geht um eine Produktivumgebung.

1
segler1968  27.07.2023, 14:33
@HardPro

ja, war etwas mutig formuliert. Und Adressat war eher die Community und nicht der Architekt :-)

2