【问题标题】:access data from files on disc in *real time**实时*访问磁盘上文件中的数据
【发布时间】:2012-02-24 17:25:00
【问题描述】:

我有以下问题要解决。我必须构建一个图形查看器来查看海量数据集。

我们有一些特定格式的文件,其中包含数百万条表示实验结果的记录。每条记录代表一个大图表上的一个样本点。我见过的最大的文件有 4370 万条记录。

平均一个文件包含 1000 万条记录。每条记录都很小(76 字节 + 每个可选的 12 字节)。由于数据太大,无法将完整的数据加载到主存储器中。我构建了一种新的文件格式,将数据压缩到每条记录 48 个字节,并将数据组织成相互关联的块。我想通过在 2D/3D 图中显示记录来“查看”数据。由于数据非常密集,我想通过加载更多数据并从主内存中删除视图中未显示的数据来逐步提高详细程度。

我还想实时访问相关记录组并预加载类似记录,以将加载时间保持在最低限度。这将为用户提供流畅的控制来查看数据,而不是类似于在互联网连接非常慢的情况下在 YouTube 上观看视频的体验。用户不能随机,必须使用控件进行导航,我想使用此信息将相关记录加载到主内存中。

必须根据当前主存储器中的内容从光盘逐步加载数据。在当前上下文中不需要的主内存中的记录可以删除,如果需要重新加载。

  1. 如何根据一些哈希值高速访问磁盘中的数据

  2. 如果要在当前上下文中查看的数据太大,我该如何管理主内存。如果您的答案是详细程度,那么我如何为大型数据集构建它?这些数据是否应该成为文件的一部分?

过去两周我一直在研究这个问题,但由于 IO 速度,我似乎陷入了困境。

我在本地 C++ 中工作,我不能在 GPL 下使用工作。如果您需要更多信息,请告诉我。

内存

【问题讨论】:

  • 此外,我可以随意更改文件格式并组织数据以适应我的目的。我使用 OpenGL 来查看数据。
  • 您是否考虑过将此数据移植到数据库中?任何体面的数据库都可以解决所有这些问题。 PostgeSQL 甚至有图形相关的扩展,你可能会觉得有用

标签: c++ data-structures


【解决方案1】:

在大多数现代文件系统(Linux、Unixes、Windows)下,您可以将文件映射到内存中。

这意味着您可以访问文件的内容,就好像它完全在内存中一样(例如,您可以使用 data[i++]、strchr(data,..) 等),并且是操作系统在它们之间进行映射使用的内存和文件。当您想读取一些尚未在内存中的数据时,操作系统将从文件中获取它。 你应该阅读这个问题的答案:Mmap() an entire large file

【讨论】:

    【解决方案2】:

    我认为您正在寻找类似于游戏中用于存储关卡几何图形的组织,只是您可能(取决于您的程序如何工作以及您需要显示哪些数据)只需要一个维度。请参阅Quadtree 和类似方法(该文章的底部)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 2014-11-13
      • 2011-11-28
      • 2012-06-27
      • 2021-03-29
      • 1970-01-01
      • 2021-01-18
      相关资源
      最近更新 更多