仅从大型数据文件中读取/写入所需的数据,以最大程度地减少内存占用

Reading/writing only needed data to/from a large data file to minimize memory footprint

本文关键字:数据 程度地 内存 文件 大型 读取      更新时间:2023-10-16

我目前正在集思广益,一个金融程序将处理(随着时间的推移(相当大量的数据。它将是一个C++/Qt GUI应用程序。

我认为在运行时将所有数据读入内存是不可能的,因为给定足够的数据,它可能会占用太多内存。

我试图想出一种方法来只读取我需要的东西,例如,如果我显示了一个帐户,只显示实际显示的数据(以及任何其他绝对必要的数据(。这样,即使数据文件是 4gb 左右,内存占用也可能保持很小。

我想到了某种搜索功能,它会慢慢地逐行读取文件并找到一个"标签"或标识我想要的特定数据的东西,然后加载它,但考虑到理论上每次有 gui 更新时都会发生这种情况,这似乎是一种可怕的方式。

从本质上讲,我希望能够有效地找到文件中的特定数据,仅将其读入内存,并可能更改它并写回它,而无需每次都读取和写入整个文件。我不是一个有经验的程序员,我在谷歌上搜索想法并不是很成功。

编辑:我可能应该提到我打算使用Qt花哨的QDataStream相关类来存储数据。换句话说,该文件可能是二进制的,并且不像文本文件那样易于逐行搜索。

根据您的评论好的。

从简单开始。暂时忘记您的财政申请,除了作为背景。所以适合您的文件系统的示例

一种数据类型,例如帐户。从固定宽度的列开始,为您提供固定宽度的记录。

一个数据文件有另一个文件用于帐号索引

做插入,更新和删除,你会学到很多。

例如。删除,您可以找到索引和数据,将它们移出并重建两个文件。

您可以在客户记录上有一个内部字段,指示它已被删除,在数据中设置该字段,然后删除索引。后者也是重写整个文件。您可以将删除标志放在索引文件中...插入时是否要追加,是否要查找已删除的记录并重复使用该槽?

您的索引只是账户和头寸的直接列表,还是想要散列它,请使用树。您可以花一周甚至几个月的时间只看索引策略。

无论如何,学习愉快。帮助您解决未来的问题会很有趣。