0

考虑以下代码,它使用 HDFql 简单地将一百万个 2 字节整数转储到 HDF5 文件中:

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。相反,文件大小约为 40MB!这比您预期的要大 20 倍左右。我在使用 HDFql 将一种二进制格式转换为 HDF5 后发现了这一点,生成的 HDF5 文件原始二进制文件大得多。有谁知道这里发生了什么?

非常感谢!

4

0 回答 0