返回介绍

2.1 HDF 基本原理

发布于 2024-01-25 22:02:55 字数 926 浏览 0 评论 0 收藏 0

在迫不及待跳进Python代码样例之前,我们有必要花几分钟时间着重关注一下HDF5自身是如何组织的。图2-1展示了HDF5的各种逻辑层。蓝色表示该层处于HDF5标准库内部;绿色则代表使用HDF5的客户软件。

图2-1 HDF5标准库。蓝色代表标准库内部组件;绿色代表调用HDF5的客户代码。灰色代表操作系统提供的资源

大多数客户代码,包括Python模块h5py和PyTables都使用C API(HDF5自己就是用C写成的)。在简介里我们已经知道HDF5的数据模型包含三大公开抽象:数据集(第3章)、组(第5章)和特征(第6章)。C API(以及其上的Python代码)操作这些对象。

HDF5使用各种内部数据结构来表示组、数据集和特征。比如,组使用一种被称为“B树”的数据结构来索引其成员,这使得我们能非常迅速地在一个组内获取成员以及创建新成员,哪怕这个组内存储了上百万个对象(61页,组如何存储)。在考虑性能问题的时候,你通常只需要关心这些数据结构。比如,在使用分块存储(第4章)时,理解数据在磁盘上实际被如何组织非常重要。

下面两层则跟你的数据如何进入磁盘有关。HDF5对象都生存在一个1维逻辑地址空间,就好像一个普通文件。然而这个地址空间和磁盘上的字节之间还有一个额外的HDF5驱动层,负责磁盘的写入机制,同时亦能在处理过程中做一些令人惊叹的事情。

比如说,HDF5的core驱动能够让你的文件完全保存在内存中,读写速度超快。family驱动让你能够将一个文件分成固定大小的多个文件块。mpio驱动则利用消息传递接口(MPI)库使得多个并发的进程访问同一个文件。所有这些驱动对于在上层操作组、数据集和特征的代码来说都是透明的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文