我是一名物理学家,通常处理使用C程序生成的大量数值数据。通常,我将所有内容存储为ASCII文件中的列,但这导致了大量文件。鉴于我的空间有限,这是一个问题,我想对整个事情有点聪明。所以...
是否有比ASCII更好的格式?我应该使用二进制文件,还是自定义格式的某些库?
我应该单独压缩每个文件,还是整个目录?在任何一种情况下,我应该使用什么格式?
非常感谢!
答案 0 :(得分:7)
在你的鞋子里,我会考虑标准的科学数据格式,它比ASCII节省更多的空间和时间,但是(虽然可能不像那样比纯粹的机器效率更高,机器 - 依赖的二进制格式)仍然提供标准的文档和便携式快速库,以便于读取和写入数据。
如果以纯二进制形式存储数据,元数据对于从数据中再次理解是至关重要的(这些数字是单精度还是双精度,或整数和长度,数组的尺寸等等,等等,存档和检索配对数据/元数据对的问题可以,并且在实践中,偶尔会使完美的数据集无法使用 - 真正的遗憾和浪费。
特别是CDF是“一种自我描述的数据格式,用于以独立于平台和学科的方式存储和处理标量和多维数据”,其中包含许多库和实用程序。作为替代方案,您可能还会考虑NetCDF和HDF - 我不太熟悉那些(以及灵活性与大小与速度问题等权衡),但是,看看它们被科学家使用的范围有多广在许多领域,我怀疑这三种格式中的任何一种都可以给你非常可接受的结果。
答案 1 :(得分:3)
如果您需要较长时间的文件,它们是重要的实验数据,可以为您证明一些事情,不要使用二进制格式。当架构发生变化时,您将无法读取它们。危险的。坚持文本(是的ascii)文件。
选择适合您需求的压缩格式。压缩时间是个问题吗?通常不会,但为自己检查一下。减压时间是一个问题吗?通常是的,如果你想对它进行数据分析。在这些条件下,我会选择bzip2。这在现今非常普遍,经过充分测试,万无一失。我会单独处理文件,因为文件越大,丢失的可能性就越大。 (比特翻转等)。
答案 2 :(得分:2)
一个TB的磁盘是一百美元。这些天很难用完空间。当然,以二进制形式存储数据可以节省空间。但是有一个成本,你将有更多的选择来再次从文件中获取数据。
检查您的操作系统可以执行的操作。 Windows支持对文件夹进行自动压缩,例如文件系统压缩文件内容,而您根本不需要执行任何操作。压缩率应与原始二进制数据竞争良好。
答案 3 :(得分:2)
你没有包含很多信息,但应该考虑一下:
1。)您是存储整数还是浮点数?这些数字的典型范围是多少? 例如:在ascii中存储小的以逗号分隔的整数,例如“1,2,4,2,1”将平均每个数据2个字节,但将它们存储为二进制将需要每个数据4个字节。
如果你的整数通常是3位数,那么以逗号分隔的二进制数与二进制数无关。
另一方面,存储双精度数(8字节值)几乎肯定会以二进制格式存在。
2.。)您如何访问这些值?如果您不关心访问时间,请压缩!另一方面,如果您需要快速随机访问,那么压缩可能会阻碍您。
3。)是否经常重复某些值?然后,您可以考虑使用霍夫曼编码或“快捷”值表。