Ich habe Daten, die von der Festplatte gestreamt und im Speicher von einer Java-Anwendung verarbeitet werden und die schließlich in SQL Server kopiert werden müssen. Die Daten können ziemlich groß sein (daher das Streaming) und es können bis zu mehreren 100.000 Zeilen eingefügt werden. Die schnellste Lösung scheint die Verwendung der Bulk-Copy-Funktion von SQL Server zu sein. Ich habe jedoch keine Möglichkeit gefunden, wie Java-Programme dies einfach und schnell genug durchführen können.
Hier sind einige Möglichkeiten, die ich bereits untersucht habe:
-
Verwendung der Klasse SqlBulkCopy in .NET. Dies ist sehr effizient, da Sie Daten direkt aus einer Datenquelle in den SQL Server übertragen können. Das Problem bei diesem Ansatz ist, dass Sie .NET verwenden müssen. Vielleicht könnte man dies mit einer Java-zu-.NET-Brücke nutzen. Ich frage mich allerdings, wie hoch die Kosten für das Marshalling von Daten zwischen den Laufzeiten sind.
-
Verwendung der TSQL-Anweisung BULK INSERT. Das Problem dabei ist, dass Sie eine ordnungsgemäß formatierte Datei auf der Festplatte erstellen müssen. Ich habe einige kleine Leistungssteigerungen gegenüber der JDBC-Batch-Insert-Anweisung festgestellt. Außerdem ist dies nur lokal nützlich.
-
Schreiben Sie Dateien auf die Festplatte und verwenden Sie das Befehlszeilenprogramm bcp. Das ist immer noch etwas schneller als das JDBC-Batch-Insert, aber nicht mehr so viel. Außerdem kann ich bei dieser Methode keine Transaktion verwenden.
-
Verwenden Sie die C API . Auch dies ist sehr effizient, aber Sie müssen C verwenden. Es gäbe eine Möglichkeit, dies über JNI zu verwenden. Wenn es eine freie Java-Bibliothek gibt, die das kann, würde ich das gerne wissen.
Ich bin auf der Suche nach der schnellsten Lösung. Speicher ist kein Thema.
Gracias.
0 Stimmen
Wenn Sie sagen, dass die Quelle der Daten Java ist - können Sie das näher erläutern? Befinden sich die Daten im Speicher einer Java-Anwendung/eines Applets?
0 Stimmen
Danke für Ihre Antwort, In Sane. Ich habe die Frage ein wenig ausführlicher formuliert.