Рассмотрим следующий код, который просто сбрасывает один миллион 2-байтовых целых чисел в файл HDF5 с использованием HDFql:
std::string filepath = "/tmp/test.h5";
sprintf(script_, "CREATE TRUNCATE FILE %s", filepath.c_str());
HDFql::execute(script_);
sprintf(script_, "USE FILE %s", filepath.c_str());
HDFql::execute(script_);
HDFql::execute("CREATE CHUNKED DATASET data AS SMALLINT(UNLIMITED)");
const int data_size = 1000000;
std::vector<uint16_t> data(data_size);
HDFql::variableRegister(&data[0]);
for(int i=0; i<data_size; i++) {data.at(i)=i;}
sprintf(script_, "ALTER DIMENSION data TO +%d", num_data-1);
HDFql::execute(script_);
sprintf(script_, "INSERT INTO data(-%d:1:1:%d) VALUES FROM MEMORY 0", 0, num_data);
HDFql::execute(script_);
Поскольку HDF5 является эффективным двоичным методом хранения данных, я ожидаю, что этот файл размер должен быть около 1E6 * 2 ~ 2MB большой. Вместо этого размер файла составляет ~ 40 МБ! Это примерно в 20 раз больше, чем вы ожидаете. Я обнаружил это после использования HDFql для преобразования одного двоичного формата в HDF5, полученные файлы HDF5 были на путь больше, чем исходный двоичный файл. Кто-нибудь знает, что здесь происходит?
Большое спасибо!