0

我目前正在头脑风暴一个财务计划,该计划将处理(随着时间的推移)相当大量的数据。它将是一个 C++/Qt GUI 应用程序。

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

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

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

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

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

4

1 回答 1

0

好的,根据您的评论。

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

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

一个文件为数据 另一个文件为帐号索引

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

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

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

您的索引是否只是账户和头寸的直接列表,或者想要对其进行哈希处理,请使用树。您可能会花费数周甚至数月的时间来单独查看索引策略。

总之学习愉快。帮助您解决未来的问题会很有趣。

于 2012-05-12T00:56:29.317 回答