过去我需要处理大文件,大小约为0.1-3GB。并不需要所有“列”,所以将剩余的数据放入RAM中是可以的。
现在我需要处理1-20GB的文件,而且随着时间的推移它们可能会变得更大。这完全不同,因为你不能再把数据放入RAM中了。
我的文件包含数百万个“条目”(我发现了一个有3000万个条目的文件)。一个条目包含大约10个“列”:一个字符串(50-1000个Unicode字符)和几个数字。我需要按“列”对数据进行排序并显示出来。对于用户来说,只有前面的条目(1-30%)是相关的,其余的都是低质量数据。
因此,我需要一些关于该如何解决问题的建议。我绝对不想把数据放到数据库中,因为对于非计算机专业人士来说安装和配置很困难。我希望提供一个单体程序。
展示数据并不难。但是排序…在常规PC上(2-6GB RAM)而又不加载数据到RAM中…会花费一些好时光。
我对MMF(内存映射文件)有些了解,但Danny Thorpe的这篇文章表明它可能不太适合:http://dannythorpe.com/2004/03/19/the-hidden-costs-of-memory-mapped-files/ 因此,我考虑只在RAM中加载需要排序的“列”的数据和指向(磁盘文件中)“条目”地址的指针。我对“列”进行排序,然后使用指针找到对应于每个列单元格的“条目”。还原将直接写入磁盘,因此不需要额外的RAM。
PS:我正在寻找适用于Lazarus和Delphi的解决方案,因为Lazarus(实际上是FPC)支持Mac的64位。64位意味着更多的可用RAM=更快的排序。
我的文件包含数百万个“条目”(我发现了一个有3000万个条目的文件)。一个条目包含大约10个“列”:一个字符串(50-1000个Unicode字符)和几个数字。我需要按“列”对数据进行排序并显示出来。对于用户来说,只有前面的条目(1-30%)是相关的,其余的都是低质量数据。
因此,我需要一些关于该如何解决问题的建议。我绝对不想把数据放到数据库中,因为对于非计算机专业人士来说安装和配置很困难。我希望提供一个单体程序。
展示数据并不难。但是排序…在常规PC上(2-6GB RAM)而又不加载数据到RAM中…会花费一些好时光。
我对MMF(内存映射文件)有些了解,但Danny Thorpe的这篇文章表明它可能不太适合:http://dannythorpe.com/2004/03/19/the-hidden-costs-of-memory-mapped-files/ 因此,我考虑只在RAM中加载需要排序的“列”的数据和指向(磁盘文件中)“条目”地址的指针。我对“列”进行排序,然后使用指针找到对应于每个列单元格的“条目”。还原将直接写入磁盘,因此不需要额外的RAM。
PS:我正在寻找适用于Lazarus和Delphi的解决方案,因为Lazarus(实际上是FPC)支持Mac的64位。64位意味着更多的可用RAM=更快的排序。