J'ai des données qui sont diffusées à partir du disque et traitées en mémoire par une application Java et qui doivent finalement être copiées dans SQL Server. Les données peuvent être assez volumineuses (d'où le streaming) et peuvent nécessiter jusqu'à 100 000 lignes à insérer. La solution la plus rapide semble utiliser la fonctionnalité de copie en bloc de SQL Server. Cependant, je n'ai trouvé aucun moyen pour les programmes Java de le faire facilement ou presque assez rapidement.Quel est le moyen le plus efficace de copier en masse vers SQL Server à partir de Java?
Voici quelques façons que je l'ai déjà étudiés:
Utilisation de la classe SqlBulkCopy dans .NET. Ceci est très efficace car vous pouvez diffuser des données directement à partir d'une source de données directement vers SQL Server. Le problème avec cette approche est que vous devez exécuter .NET. Peut-être que cela pourrait être utilisé en utilisant un pont Java vers .NET. Bien que, je m'interroge sur le coût de marshalling des données entre les runtimes.
Utilisation de l'instruction BULK INSERT TSQL. Le problème avec ceci est que vous devez créer un fichier correctement formaté sur le disque. J'ai vu quelques petits gains de performance sur l'insertion de lot de JDBC en utilisant ceci. En outre, ceci n'est utile que localement. Ecrivez les fichiers sur le disque et utilisez l'utilitaire de ligne de commande bcp. Encore un peu plus rapide que JDBC mais pas beaucoup. Je perds également la possibilité d'utiliser une transaction avec cette méthode.
Utilisez le C API. Encore une fois, très efficace, mais vous devez utiliser C. Il serait un moyen d'utiliser ceci via JNI. S'il y a une librairie Java gratuite là-dedans, j'aimerais bien le savoir.
Je suis à la recherche de la solution la plus rapide. La mémoire n'est pas un problème.
Merci!
Lorsque vous dites que la source des données est Java - pouvez-vous élaborer? Les données sont-elles en mémoire d'une application/applet Java? – InSane
Merci pour votre réponse Dans Sane. J'ai fait la question un peu plus détaillée. –