J'aimerais profiter de la puissance des IO en HDF5 pour stocker des données assez simple, typiquement l'équivalent d'un tableau de 5 colonnes, sauf que je vais avoir beaucoup de lignes (à la louche 1 000 000 de lignes et 5 colonnes) et donc que je sens venir le bordel avec l'ASCII

Mais revenons aux bases,
j'ai pris le tutorial sur les dataset hdf5 qui me propose d'écrire un tableau data dans un dataset

(J'uttilise l'API CPP, et ce code est un copier-collé du tuto à peine modifié)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
int data[5] = {0,1,2,3,4}
H5File file( outfile, H5F_ACC_TRUNC );
DataSpace dataspace( RANK, dimsf );  // RANK =1 dimsf[0] = 5
    /*
       * Define datatype for the data in the file.
       * We will store little endian INT numbers.
       */
IntType datatype( PredType::NATIVE_INT );
datatype.setOrder( H5T_ORDER_LE );
DataSet dataset = file.createDataSet( DATASET_NAME, datatype, dataspace );
dataset.write( data, PredType::NATIVE_INT );
Jusque là ça marche.
maintenant je veux rajouter une ligne à mon dataset
si je fais naivement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
int data2[5] = {10, 11, 12, 13, 14}
dataset.write( data2, PredType::NATIVE_INT );
Ca overwrite la précédente entrée

Si un peu moins naïvement je fait (ce qui ressemble à ce que j'aurais à une itération d'une boucle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
int data2[5] = {10, 11, 12, 13, 14}
DataSet dataset2 = file.createDataSet( DATASET_NAME, datatype, dataspace );
dataset2.write( data2, PredType::NATIVE_INT );
Ca me retourne une exception FileIException

Précisions que je ne sais pas à priori combien je vais avoir d'entrée à sauvegarder, et que j'ai pas envie de faire un append d'un gros vecteur pour tout sauvegarder lorsque mon code aura finit de tourner
Au passage est-ce que l'écriture sur fichier hdf5 se fait de facon intélligente (genre avec un cache qui trouve le bon compromis entre stockage en mémoire et perte de temps due à l'écriture sur disque, ou est-ce que (a terme) je vais devoir habiller l'écriture dans le fichier dans une classe qui gère le caching ?