用最小堆去统计前100的URI,用文件方式和RocksDB两种方式实现URI的统计:
- 扫描文件算每个URI的Hashcode,通过Hashcode除100取余,将余数相同的URI进行,以追加的方式存储在一起;然后第二遍扫描分组文件,统计每个分组前100URI,扫描下一个分组的结果再与前面的前100结果比较,所有分组扫描完成,则得出最终的结果。
- 通过RocksDB去存储,URI为KEY,其统计数为VALUE,采用get -> modify -> set流程去更新每个扫描到的URI的频率,RocksDB的get操作比较慢,差不多是文件方式的两倍多时间。
- 可以采用专门的磁盘IO线程来对磁盘进行读写;
- 增加磁盘的顺序读写操作,IO操作增加缓存,提高效率;
- 每次多读一些数据进来,读取的内容通知对应的线程去处理;
- 写的内容也是存入缓存,通知IO线程去处理;
- 如果可以把不同的文件存储到不同的硬盘,利用磁盘之间的并发效率;
- RocksDB可以采用merge方式,每次追加,减少get的操作时间;
- RocksDB别的可以提高IO的优化方法。