分层数据格式。与替代格式相比有哪些优势?


Answers:


25

解释这个问题的一个好方法也许是,与替代格式相比有哪些优势?

我认为主要的替代方法是:数据库,文本文件或其他打包/二进制格式。

要考虑的数据库选项可能是列式存储或NoSQL,或用于小型独立数据集SQLite。数据库的主要优点是能够处理比内存大得多的数据,具有随机访问或索引访问以及快速添加/追加/修改数据的能力。主要缺点是它比HDF慢得多,因为需要读取和处理整个数据集。另一个缺点是,除了像SQLite这样的嵌入式数据库外,数据库是一个系统(需要管理,设置,维护等),而不是简单的自包含数据存储。

文本文件格式选项为XML / JSON / CSV。它们是跨平台/语言/工具包,由于具有自我描述能力(或显而易见的:),因此是一种很好的存档格式。如果未压缩,它们将很大(10x-100x HDF),但是如果被压缩,它们将相当节省空间(压缩的XML与HDF大致相同)。这里的主要缺点还是速度:解析文本比HDF慢得多。

其他二进制格式(npy / npz numpy文件,blz blaze文件,协议缓冲区,Avro等)与HDF具有非常相似的属性,但它们的支持范围较广(可能仅限于一个平台:numpy),并且可能还有其他特定限制。它们通常不提供引人注目的优势。

HDF是数据库的很好的补充,如果要使用相同的数据不止一次,则运行查询以生成大致内存大小的数据集,然后将其缓存在HDF中可能是有意义的。如果您的数据集是固定的,并且通常作为一个整体进行处理,那么将其存储为适当大小的HDF文件的集合并不是一个坏选择。如果您的数据集经常更新,那么将其作为HDF文件定期进行存储可能仍会有所帮助。

总而言之,HDF是一种通常用于整体读取(或写入)数据的良好格式。由于广泛的支持和兼容性,它是许多应用程序的通用语言或通用/首选交换格式,具有良好的存档格式,并且速度非常快。

PS为了提供一些实际的背景,我最近将HDF与替代方案进行比较的经验是,某个小的(远小于内存大小的)数据集读为HDF花费了2秒的时间(其中大部分可能来自Pandas的开销);从JSON读取大约1分钟;和1个小时写入数据库。当然可以加快数据库写入速度,但是您最好拥有一个好的DBA!这就是开箱即用的方式。


我们可以说HDF 一种列式存储格式吗?我对这两种方法都不是很精通,但是我使用过的HDF样本确实表现出基于列的数据聚合的外部功能。
费利克斯·加侬-格雷尼尔

数据库和HDF都提供了“处理比内存大得多的数据的能力”,所以我不认为准确地说这是数据库优于HDF的优势,因为(他们称之为“部分I / O”是核心功能davis.lbl.gov/Manuals/HDF5-1.8.7/UG/12_Dataspaces.html
David LeBauer,

11

好处之一是广泛的支持-C,Java,Perl,Python和R都具有HDF5绑定。

另一个好处是速度。我从未见过它进行过基准测试,但是HDF应该比SQL数据库要快。

我了解与大型科学数据集和时间序列数据集(网络监控,使用情况跟踪等)一起使用时,它非常好。

我认为HDF文件没有大小限制(尽管OS限制仍然适用。


5
根据个人经验,我会补充说内置文档/标签非常庞大。现在,我所有的数据集可以可以存储与他们的取样频率,异常,等等,等等来的地方明确的记录
加拉明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.