我在c ++中实现了一个范围搜索代码,我有一个大文件(20GB),我需要搜索不同查询的特定范围。
我已将大文件分成较小的块来固定搜索,其中我有两个级别的根和叶子,数据存储在叶子中(遵循ISAM树的相同想法)。
即:
我有3000万条数据线
每页分为30000页,100000行
一个根到每个页面的根(根有30000)。
然而,我注意到,一旦搜索范围从第200页或更高版本开始,流就会变得非常慢。我完成后关闭每一页。那么读取流变得非常慢有什么原因吗?
答案 0 :(得分:0)
为什么阅读流变得很慢?
缓存未命中!
文件解析的速度在很大程度上取决于文件系统缓存。它们存在,然后解析将相对较快。如果没有,它就不会那么快。
你有一个大文件(20GB),这个文件太大而无法容纳缓存。结果,您的缓存将耗尽,程序将被强制从磁盘获取数据(这将严重损害性能)。