我在c++中实现了一个范围搜索代码,我有一个大文件(20GB),我需要搜索不同查询的特定范围。
我已经将大文件分成了更小的块来固定搜索,我有两个层次,根和叶,数据存储在叶中(遵循ISAM树的相同思想)。
即:我有3000 000 000行数据
分为30000页,每页100000行指向每个页面的根(根有30000)。
然而,我注意到一旦搜索范围从第200页或更高页开始,流就会变得明显变慢。我每看完一页就关上。那么,有什么原因导致阅读流变得非常慢吗?
- 我在linux机器上运行
- 我没有执行多线程的选项
- 读取这些文件是顺序的。
为什么阅读流变得很慢?
缓存错过!
文件解析的速度很大程度上取决于文件系统缓存。如果它们存在,那么解析将相对较快。如果不是,它不会那么快。
您有一个大文件(20GB),它太大了,缓存无法容纳。因此,您的缓存将被耗尽,程序将被迫从磁盘获取数据(这将严重损害性能)。