我们的目标是使用HDF5作为数据格式。之所以选择HDF5,是因为它是一种类似于分层文件系统的跨平台数据格式,并且支持大量数据。
该文件将包含数组和一些参数。问题是如何存储参数(这些参数不是由大量数据组成的),还要考虑文件版本控制问题和构建库的努力。HDF5内部的参数可以存储为(A)人类可读的属性/值对或(B)HDF5复合数据类型形式的二进制数据。
举个例子,让我们考虑一个有三个顶点的多边形作为参数。例如,在情况A下,我们可以有一个名为Polygon
的变量,该变量具有一系列顶点的字符串表示,例如(1, 2); (3, 4); (4, 1)
。在情况B下,我们可以使用一个由[2x3]矩阵组成的名为Polygon
的变量。
我们有一些想法,但如果能得到已经从事过类似工作的人的意见,那就太好了。更准确地说,你能列出A和B的赞成/反对意见,并说明在什么情况下更可取吗?
作为一个不得不做很多次你所说的事情的人,rr基本上做对了,但我会稍微改变一下重点。
- 对于文件版本控制,文本基本上是赢家
- 由于您使用的是hdf5库,所以我认为序列化和解析都相当于人工操作
- 文本文件更便于移植。您可以以最小的风险跨代硬件传输文件
-
文本文件对人类来说更容易使用。如果你想提取数据的一个子集并对其进行操作,你可以用许多计算机上的许多程序来完成。如果你使用的是二进制数据,你需要一个允许你这样做的程序。根据你对处理你的数据的人的看法,这可能会对数据的可访问性和维护成本产生巨大影响。您将能够在excel中对数据进行sed、grep甚至编辑。
-
二进制数据的输入和输出(对于大型数据集)将比文本快得多。
- 在一个新的环境中处理这些二进制文件(例如科幻小说中的128位小端计算机)将需要一些工程
- 类似地,如果用其他语言编写应用程序,则需要在应用程序之间处理相同的编码。这要么意味着工程方面的努力,要么意味着在所有平台上都有相同的库。纯文本这更容易
- 如果您希望其他人编写能处理您的数据的应用程序,纯文本更简单。如果你提供的是二进制文件,你必须提供一个他们可以遵循的文件规范。使用纯文本,任何人都可以查看文件并找出如何解析它
- 您可以通过压缩来归档文本文件,因此空间问题主要是您正在处理的数据的问题
- 调试二进制数据存储比调试纯文本存储要多得多
因此,最终它在一定程度上取决于您的用例。查看处理纯文本的无数工具中的数据有意义吗?只有用大数据hdf5观看者来看待它才有意义吗?就时间和空间而言,写纯文本对你来说会很繁重吗?
一般来说,当我遇到这个问题时,我基本上总是做同样的事情:我将数据存储在纯文本中,直到我意识到速度问题比使用二进制更令人恼火,然后我切换。如果你事先不知道自己是否已经跨过了这个阈值,那么从纯文本开始,并以一种稍后很容易切换的方式将接口写入持久层。这只是一点点额外的工作,由于纯文本更容易调试,您可能会得到这些工作。
如果您希望经常手动编辑文件(如XML或JSON),请使用可读格式。
否则就使用二进制——为其创建解析器要容易得多,而且它的运行速度将比任何语法解析器都快。
还要注意,没有什么可以阻止您稍后在二进制和人类可读形式之间创建转换器。
版本控制文件听起来可能不错,但你真的要检查diff中"包含大数组"的文件吗?