Pytables / 数据库相对于文件系统的数据组织优势?
Posted
技术标签:
【中文标题】Pytables / 数据库相对于文件系统的数据组织优势?【英文标题】:Benefits of Pytables / databases over file system for data organization? 【发布时间】:2014-09-26 10:04:22 【问题描述】:我目前正在尝试重新设计我实验室的一般工作流程,并且遇到了一个概念障碍,这主要是由于我普遍缺乏这方面的知识。 我们的数据目前是按照典型的文件系统结构组织的:
日期\单元格#\扫描#
对于特定日期,通常有多个 Cell 文件夹,并且在这些 Cell 文件夹内有多个 Sweep 文件(这些是相对简单的 .csv 文件,其中记录参数单独保存在 .xml 文件中)。因此,在任何 Date 文件夹中,可能有几十到几百个用于当天录制的文件,这些文件组织在多个 Cell 子目录文件夹中。
我们的工作流程通常涉及在一个 Cell 文件夹中打开多个扫描文件,对它们进行平均,然后对来自其他 Cell 文件夹的数据点的这些文件进行平均,通常需要数天时间。
这对于 Pandas 和 Numpy 来说相对简单,尽管在远程访问保存到实验室服务器的文件夹时会有某种“手动”的感觉。我们有时也会遇到问题,因为我们经常需要同时从许多这些文件中提取数据。虽然这通常不是问题,但文件的大小可能在几 MB 到 1000 MB 之间。在后一种情况下,我们必须采取措施不将整个文件加载到内存中(或至少一次不加载多个文件)以避免内存问题。
作为这次重新设计的一部分,我一直在阅读有关用于数据组织和访问可能太大而无法存储在内存中的数据集的 Pytables。所以我想我的两个主要问题是
-
如果内存不足问题不严重(即不会经常使用该实用程序),那么与仅在服务器上维护文件系统相比,使用 Pytables 之类的东西进行数据组织是否有任何显着优势(或本地)?
有什么理由不走 Pytables 数据库路线吗?我们正在重新设计我们的数据收集和存储,一种选择是将数据直接收集到 Pandas 数据帧中,并将文件保存为 HDF5 文件类型。我目前正在权衡当前系统的成本/收益,该系统将数据存储到 csv 文件中,然后加载到 Pandas 中以供稍后分析。
我的想法是,通过创建数据库而不是我们当前拥有的文件系统,我们可能 1. 能够通过 hdf5 提供的压缩减少(无论如何)磁盘上的文件大小,以及 2. 访问数据总体上可能会变得更容易,因为基于不同参数的查询能力。但我对 2 的担忧是,最终,由于我们通常只是打开整个文件,因此我们不会过多地利用它来实现功能——我们基本上会执行我们需要执行的相同步骤在文件系统中打开一个文件(或一系列文件)。这让我想知道,就我们的整体工作流程而言,这需要的前期工作是否值得。
【问题讨论】:
【参考方案1】:首先,我是 Pytables 的忠实粉丝,因为它帮助我管理庞大的数据文件(每个文件 20GB 或更多),我认为这正是 Pytables 发挥其优势的地方(快速访问、内置查询等等。)。如果系统也用于存档,HDF5 的压缩能力将减少空间需求并减少传输的网络负载。我不认为在 HDF5 文件中“复制”您的文件系统有优势(很高兴被告知我错了)。我建议采用混合方法:保持正常的文件系统结构,并将实验数据与所有元数据一起放入 hdf5 容器中。通过这种方式,您可以保持正常文件系统的灵活性(访问权限、复制等),并且如果您有更大的文件且内存存在问题,仍然可以利用 pytables 的功能。将数据从 HDF5 提取到普通的 pandas 或 numpy 非常便宜,因此您的“正常”工作流程不应该受到影响。
【讨论】:
我认为这是我的难题的基础 - 复制我当前的文件系统是否有任何真正的好处,因为它存在于我们的服务器上,带有 pytables 数据库。我确实认为切换到 HDF5 并结合元数据和原始数据是最好的途径,无论我们是否追求某种类型的数据库。 我会拒绝这种说法。也许这个问题here 可以帮助您做出决定。以上是关于Pytables / 数据库相对于文件系统的数据组织优势?的主要内容,如果未能解决你的问题,请参考以下文章
结合 Java、Python、PyTables 和 HDF5 的简单有效的解决方案