我正在开发一个 开源项目 处理向文件夹添加元数据。提供的 (Python) API 允许您浏览和访问元数据,就像它只是另一个文件夹一样。因为它只是另一个文件夹。
\folder\.meta\folder\somedata.json
在书中阅读HDF5 Python和HDF5|| |我一直在寻找与使用文件夹中的文件相比使用它的好处,但我遇到的大多数内容都谈到了分层文件格式的好处,即通过其 API 添加数据的简单性: 或其能够根据请求仅读取其中的某些部分(例如随机访问),以及并行执行单个 HDF5 文件(例如用于多处理)
>>> import h5py
>>> f = h5py.File("weather.hdf5")
>>> f["/15/temperature"] = 21
您可以挂载 HDF5 文件,
https://github.com/zjttoefs /hdfuse5 它甚至拥有一个强大而简单的基础概念
组 和 数据集 来自wiki的内容: 数据集,它们是同质类型的多维数组|| |组,是可以保存数据集和的容器结构 其他组
- 替换
- 数据集
与 文件 和 组 与 文件夹 整个功能集对我来说听起来就像什么文件文件夹已经完全有能力做到这一点。 对于我遇到的每一项好处,没有一个是 HDF5 独有的。 所以我的问题是,如果我给您一个 HDF5 文件和一个包含文件的文件夹,两者都有相同的内容,在哪种情况下HDF5更适合?
编辑:
已经得到了一些关于HDF5可移植性的回应。
听起来很可爱,但我仍然没有得到答复一个示例,一个场景,其中 HDF5 将胜过包含文件的文件夹。当一个文件夹可以在任何计算机、任何文件系统、通过网络、支持“并行 I/O”、无需 HDF5 解释器的情况下人类可读时,为什么有人会考虑使用 HDF5。
我会尽可能可以说,包含文件的文件夹比任何 HDF5 都更便携。
编辑 2:
Thucydides411 刚刚给出了可移植性很重要的场景示例。
https://stackoverflow.com/a/28512028 /478949
我认为我从这个线程的答案中得到的是,HDF5 非常适合当您需要文件和文件夹的组织结构时,就像上面的示例场景中那样,有很多(数百万)个小文件和文件夹(~1 字节)数据结构;例如单个数字或字符串。它通过提供有利于小而多而不是少而大的“子文件系统”来弥补文件系统的不足。 在计算机图形学中,我们使用它来存储几何模型和有关个体的任意数据顶点似乎与它在科学界的使用非常吻合。
I think what I'm taking away from the answers in this thread is that HDF5 is well suited for when you need the organisational structure of files and folders, like in the example scenario above, with lots (millions) small (~1 byte) data structures; like individual numbers or strings. That it makes up for what file-systems lack by providing a "sub file-system" favouring the small and many as opposed to few and large.
In computer graphics, we use it to store geometric models and arbitrary data about individual vertices which seems to align quite well with it's use in the scientific community.
你问什么时候 HDF5 比包含文件的文件夹更可取。这实际上是一个很好的问题,因为表面上看,它们在功能上是等效的。以下是一些考虑因素:
-
对于包含大量小文件的大数据集,HDF5 的性能明显优于文件系统。 这是因为文件系统上的元数据(例如文件大小、创建时间、权限等)通常存储在磁盘上的单独位置。这意味着要访问一个小文件,你的操作系统必须在读取实际文件数据之前进行多次磁盘查找。对于包含数百万个小文件的数据集来说,这可能会导致巨大的性能损失。另一方面,HDF5 将所有元数据和数据存储在单个文件中,这允许对数据进行快速有效的访问,尤其是对于大型数据集。
-
HDF5 可以处理文件系统无法处理的大文件和数据集。 大多数文件系统对文件大小有限制,而 HDF5 可以处理高达艾字节的文件。这使得 HDF5 成为需要存储和分析真正庞大数据集的科学和工程应用程序的理想选择。
-
HDF5 提供了一种比文件系统更结构化和有组织的数据存储方式。 HDF5 允许你将数据存储在层次结构中,这些层次结构可以包含数据集和组。这使得按逻辑方式组织数据和存储有关数据的元数据变得更加容易。另一方面,文件系统本质上更灵活,但这对于需要在数据组织中保持一定严格性的科学应用程序来说可能是一个缺点。
-
HDF5 是一个可移植的格式,可以在各种平台上读取。 这意味着你可以在一台机器上创建一个 HDF5 文件,然后在另一台机器上打开它,而无需担心兼容性问题。另一方面,文件系统是特定于平台的,因此你可能需要执行额外的步骤才能确保你可以在不同机器上访问你的数据。
但是,HDF5 也有一些缺点:
-
HDF5 是一个二进制格式,不能像文本文件那样容易地被人阅读和编辑。 如果你需要能够在文本编辑器中查看或编辑你的数据,那么 HDF5 可能不是最佳选择。
-
HDF5 需要一个专门的库来读取和写入,而文件系统则由操作系统直接支持。 这意味着在开始使用 HDF5 之前,你需要安装 HDF5 库。
总而言之,如果你需要存储和分析大型数据集,尤其是包含大量小文件的数据集,那么 HDF5 是一个不错的选择。如果你需要一个可移植的格式并且能够存储有关你的数据的元数据,那么它也是一个不错的选择。然而,如果你正在处理小数据集或者你需要能够以人类可读的格式访问你的数据,那么文件系统可能是一个更好的选择。
标签:python,persistence,metadata,hdf5 From: 22125778