delphi – 排序20GB的数据

前端之家收集整理的这篇文章主要介绍了delphi – 排序20GB的数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在过去,我不得不处理大文件,大约在0.1-3GB范围内.并非所有“列”都需要,因此可以将剩余数据放入RAM中.
现在我必须使用1-20GB范围内的文件,它们可能会随着时间的推移而增长.这完全不同,因为您无法再将数据放入RAM中.

我的文件包含数百万个“条目”(我找到了一个包含30密耳条目的条目).入口包含大约10个“列”:一个字符串(50-1000个unicode字符)和几个数字.我必须按“列”对数据进行排序并显示它.对于用户而言,只有顶部条目(1-30%)是相关的,其余的是低质量数据.

所以,我需要一些关于朝哪个方向发展的建议.我绝对不希望将数据放入数据库中,因为它们很难为非计算机精通人员安装和配置.我喜欢提供一个单片程序.

显示数据并不困难.但排序……无需在RAM中加载数据,在常规PC(2-6GB RAM)上……将会耗费一些时间.

我看了一下MMF(内存映射文件),但Danny Thorpe的这篇文章表明它可能不合适:http://dannythorpe.com/2004/03/19/the-hidden-costs-of-memory-mapped-files/

所以,我在考虑只加载必须在ram中排序的列中的数据和指向“entry”的地址(到磁盘文件中)的指针.我对“列”进行排序,然后使用指针查找与每个列单元格对应的条目并恢复该条目. “恢复”将直接写入磁盘,因此不需要额外的RAM.

PS:我正在寻找一种适用于Lazarus和Delphi的解决方案,因为Lazarus(实际上是FPC)对Mac有64位支持. 64位表示可用RAM更多=排序更快.

解决方法

我认为一种方法Mergesort,这是一个很好的排序算法
内存有限的大量固定记录.

大概的概念:

>从输入文件中读取N行(允许您将行保留在内存中的值)
>对这些行进行排序,并将排序的行写入文件1
>重复下一行N行以获取文件2


>到达输入文件的末尾,您现在有M个文件(每个文件都已排序)
>将这些文件合并到一个文件中(您还必须按步骤执行此操作)

您还可以考虑基于嵌入式数据库解决方案,例如Firebird embedded:它适用于Delphi / Windows,你只需在你的程序文件夹中添加一些DLL(我不确定Lazarus/OSX).

原文链接:https://www.f2er.com/delphi/102473.html

猜你在找的Delphi相关文章