J'ai fait mes tests de performance, voici les résultats du mode DirectPath et les résultats du mode bulk.
Mon programme lit un fichier depuis un ou plusieurs threads en //.
Chacun reformate chaque ligne, puis la passe à un injecteur qui toutes les 10 000 lignes lance l'injection du groupe dans Oracle.
Le test a été fait sur un fichier de 2 millions de lignes.
La machine est un portable Dell avec un cpu pas trop mauvais, mais un HDD a chier, donc des résultats de test de perf pas forcément logique lors de l'augmentation du nombre de lecteurs.
Nb Lecteurs | Mode | Durée de traitement
1 | DP | 116 s
2 | DP | 150 s
4 | DP | 144 s
1 | Bulk | 60 s
2 | Bulk | 64 s
4 | Bulk | 56 s
Le mode directPath est plus lent que le mode bulk sur ma machine, cela m'étonne et je pense qu'il faut que je fasse des réglages car les 2 devraient être plus proche que cela, même si dans l'absolu je suis quand même à environs 15 000 lignes par seconde en mode DirectPath.
En gros des perfs pas dégeu, mais l'écart avec le mode bulk m'étonne.
Sinon d'un point de vu utilisation des fonctions DirectPath de la lib :
- L'obligation de faire la conversion de tous les types en char* avant l'appel de la fonction OCI_DirPathSetEntry, me donne une sensation de lourdeur dans son usage par rapport aux mode bulk qui prend directement les tableaux dans le type du champs. Enfin ca reste une sensation, le nombre de ligne suplémentaire est limité.
- Le fait que la fonction OCI_DirPathSetEntry necessite un void* et pas un const char* pour la valeur est imposé par OCI, ou bien il est possible de passer autre chose qu'un char* ?
- Pareil pour le paramètre name de OCI_DirPathSetColumn qui est de type char* et pas const char* ?
- Les index et les numéros de colonne qui commence à 1 au lieux de 0, c'est pas top top, c'est un fonctionnement un peu contre nature en c/c++ ;)
Voila pour mes première remarques.
Je pourrais t'en faire d'autre la semaine prochaine après un peu plus d'utilisation de la lib.