I dati sono in streaming dal disco ed elaborati in memoria da un'applicazione Java e che devono infine essere copiati in SQL Server. I dati possono essere abbastanza grandi (quindi lo streaming) e possono richiedere fino a diverse 100.000 righe da inserire. La soluzione più veloce sembra utilizzare la funzionalità di copia bulk di SQL Server. Tuttavia, non ho trovato alcun modo per i programmi Java di farlo in modo facile o quasi abbastanza veloce.Qual è il modo più efficiente per eseguire il bulk-copy su SQL Server da Java?
Ecco alcuni modi che ho già indagato:
Uso della classe SqlBulkCopy in .NET. Questo è molto efficiente dal momento che è possibile eseguire lo streaming dei dati direttamente da un'origine dati e direttamente a SQL Server. Il problema con questo approccio è che devi eseguire .NET. Forse questo potrebbe essere usato usando un bridge Java to .NET. Sebbene, mi chiedo del costo dei dati di marshalling tra runtime.
Utilizzo dell'istruzione BULK INSERT TSQL. Il problema con questo è che è necessario creare un file correttamente formattato sul disco. Ho visto alcuni piccoli guadagni in termini di prestazioni rispetto all'inserimento batch di JDBC utilizzando questo. Inoltre, questo è utile solo localmente.
Scrive i file sul disco e utilizza l'utilità della riga di comando bcp. Ancora un po 'più veloce rispetto al batch di JDBC, ma non così tanto. Inoltre, perdo la possibilità di utilizzare una transazione con questo metodo.
Utilizzare C API. Di nuovo, molto efficiente, ma devi usare C. Ci sarebbe un modo per usarlo attraverso JNI. Se c'è qualche libreria Java gratuita là fuori che fa questo, mi piacerebbe saperlo.
Sto cercando la soluzione più veloce. La memoria non è un problema.
Grazie!
Quando si dice che la fonte dei dati è Java, è possibile elaborare? I dati sono in memoria di un'applicazione/applet Java? – InSane
Grazie per la tua risposta In Sane. Ho fatto la domanda un po 'più dettagliata. –