2017-06-28 1 views
0

Arbeiten an einem kleinen Beispiel, wo Millionen von Datensätzen von Teradata-Datenbank zu Oracle DB kopieren müssen.Kopieren Sie Tabelle mit Millionen von Datensätzen von einer Datenbank in eine andere - Spring Boot + Spring JDBC

Umwelt: Frühling Stiefel + Feder JDBC (jdbcTemplate) + Feder REST + Feder Scheduler + Maven + Oracle + Teradata

mit Spring JDBC batchupdate die Daten in die Zieldatenbank Oracle einzufügen.

Verwendung von Teradata 'Top 1000' in SQL-Abfrage aus der Quelldatenbank.

fecthDataResults = repository.queryForList(
       "select top 1000 A, B, C, D, E from " + schemaName + ".V_X"); 

Abfrage von einer Ansicht "V_X".

Diese Ansicht hat 40 Millionen Datensätze und Spring Boot-Anwendung wird ersticken, wenn es ausgeführt wird.

Auch Einfügen in 2 Tabellen (Primary und Backup) in Ziel Oracle DB.

Was ist der beste Weg, um 40 Millionen Datensätze zu holen und zu laden/kopieren, um sicherzustellen, dass das Kopieren erfolgreich in 2 Tabellen durchgeführt wurde.

Spring Scheduler, um die Stapelkopie zu einem bestimmten Zeitpunkt/Intervall zu planen. Spring Rest, um manuell zu kopieren - beides erreicht.

Irgendwelche Vorschläge würden geschätzt.

Danke.

+2

Ich würde das an native 'imp/exp'-Skripten delegieren ... aber wenn Sie es in Java tun müssen, könnten Spring Batch + Spring JDBC-Operationen (' top X in Y' auswählen) eine Option sein. –

+0

Exportieren von Daten aus Teradata (in CSV oder ein anderes Format) -> Transform -> direkt in Oracle importieren (mit Tools wie SQL * Loader Dienstprogramm) eine Option für Sie? Auf diese Weise umgehen Sie die Feder Anwendung – Srinivas

+0

Dank @Carlos. Verwenden Sie Top X (1000) in Y selbst. Überprüfen Sie jetzt, wie Sie mit 36 ​​Millionen Datensätzen arbeiten können. – Manish

Antwort

0

gut in der Basis der Informationen, die Sie geben und dem gewählten Stapel folgen, meiner Meinung nach haben Sie zwei Möglichkeiten, erstellen Sie zuerst ein Projekt mit spring batch zusätzlich mit Feder Batch-Admin oder Feder Integration mit Rest beschäftigen. Die zweite nutzt tatsächlich die erste Lösung in einem Big-Data-Konzept mit Spring XD Ich empfehle Ihnen, einen Profiler zu verwenden, um die Leistung so viel wie möglich zu beschleunigen.

2

Es gibt verschiedene Möglichkeiten, wie Sie können Lösung dieses:

  1. Logstash Approach - Geben Sie Ihre Quell- und Zieldaten und laden die Daten sowohl auf dem Ziel DBs. Es hat Cron-Unterstützung und der Logstash kann basierend auf dem Zeitplan ausgeführt werden. Es ist ziemlich schneller. Sie können angeben, wie viele Zeilen Sie jedes Mal abrufen möchten.

  2. Verwenden Sie ein ETL-Tool. Sie können mit jeder der Open-Source-Versionen gehen, wenn Sie das Ökosystem an Ort und Stelle haben. Talend ist ein guter Kandidat, wo Sie Ihren Job entwerfen und als ausführbares Jar exportieren können. Sie können dies planen, indem Sie eine beliebige Komponente Ihrer Wahl verwenden.

  3. Federcharge. Bitte beziehen Sie sich auf diese Frage. Spring RESTful web services - High volume data processing

  4. Spring Cloud Datenfluss oder Spring Boot mit einem MQ als Zwischenspeicher zwischen Ihren Datenquellen. Möglicherweise müssen Sie Nachrichtenwarteschlangen einführen, um Failover- und Fallback-Mechanismen zu handhaben. Sehr zuverlässig und kann asynchron implementiert werden.

Meine persönliche Meinung ist, mit Logstash zu gehen. Wenn Sie glauben, dass eine der oben genannten Lösungen sinnvoll ist. Ich kann sie ausarbeiten, wenn Sie wollen.

Verwandte Themen