Bonjour,
Pour les besoins d'un projet existant, je dois pouvoir (depuis une servlet) insérer de gros volumes de données (1 à 5 Go) dans un champ BLOB Oracle 10g. Le projet existant utilise Hibernate 3.2.4 pour effectuer le mapping O/R (à l'aide d'un champ "blob" Hibernate).
Le code que j'utilise pour effectuer cette insertion est très standard, puisque :
- je récupère l'outputstream du blob
- je récupère l'inputstream d'un fichier local contenant les données à charger
- via un byte[] buffer, je fais le transfert du fichier vers le blob
(tout cela via les API Hibernate et JDBC, càd sans utiliser directement les classes du driver Oracle ojdbc14.jar)
Problème : les temps d'insertion sont énormes, comparé à ce que j'obtiens en faisant la manip équivalente depuis sqlplus ou SQLDeveloper (pourtant codé en Java). Dans mon code, je fais afficher une ligne de debug à chaque Mo transféré. Disons que jusqu'à 700 Mo, j'ai un débit correct (1 à 2 Mo/s) et à partir de 700-750 Mo je vois que chaque Mo supplémentaire nécessite 30 secondes à une minute pour être transféré.
J'aimerais donc savoir s'il existe de "bonnes pratiques" pour l'insertion de tels blobs énormes. En fait je ne sais même pas si les blobs sont conseillés pour ces volumes de données, mais j'ai vraiment du mal à trouver de la littérature sur le sujet.
Si quelqu'un peut m'aider, ou a des infos sur la question, je suis intéressé.
Merci d'avance !
Partager