提高spark sql翻页查询性能的想法

一般每一页的数据量比较小,1000条以内。大概的想法就是把要查询的数据先一次性查出来缓存在内存中,之后翻页查询的时候直接取结果就行了,这样只是第一次查的比较慢,后面从内存中直接取数据就非常快了。但是这又带来一个问题,如果结果集太大,比如有100w行数据,而且有很多列,这样就会占用大量内存,使执行内存变小,反而会降低查询性能,因此需要分段缓存结果集。具体的做法就是:每次缓存的数据量为:每页行数*100,如果查询的数据不在缓存范围内,再次执行查询,并缓存如下范围的数据:

offset~offset+limit*100

这样每次新的查询保证缓存之后100页的数据。

这样做的缺点是需要在业务代码中加入对offset, 当前缓存数据等一些状态的管理逻辑。仅供参考!

猜你喜欢

转载自blog.csdn.net/zhuge134/article/details/79705725