我发现Druid查询性能可以从以前的查询中受益。因此,我试图了解原因。 我知道Druid使用缓存(我在Broker中使用缓存),但是此缓存仅存储每个段查询的结果(对吗?)。但是,我注意到,如果后续查询使用相同的段,则性能会提高。
示例:
我搜索发现此行为可以通过OS页面缓存来实现。根据我的研究,我认为Druid在第一次查询数据源的过程中会将必要的段加载到内存(OS页面缓存)中。并且在下一个查询中可以更快地读取这些段。
我是对的吗? 我查看了Druid文档,但找不到任何有用的信息。
您能帮我解释一下这种令人敬畏的行为吗?
最诚挚的问候,
何塞·科雷亚(JoséCorreia)
答案 0 :(得分:1)
Druid确实使用缓存来提高各个级别的性能。在历史记录的段级别,在代理的德鲁伊查询级别。您提供的内存越多,它的工作速度就越快。
以下是有关缓存的文档-
查询缓存
Druid支持通过LRU缓存进行查询结果缓存。结果与给定查询的参数一起按段存储。这样,德鲁伊就可以部分基于缓存中的细分结果以及部分基于扫描历史/实时细分的细分结果来返回最终结果。
段结果可以存储在本地堆缓存中,也可以存储在外部分布式键/值存储中。细分查询缓存可以在“历史记录”和“代理”级别上启用(不建议在两者上都启用缓存)。
代理上的查询缓存
与在“历史记录”中为小型集群启用查询缓存相比,在代理上启用缓存可以产生更快的结果。对于较小的生产集群(<20个服务器),建议使用此设置。请注意,在代理上启用缓存后,“历史记录”的结果将按每个细分返回,并且“历史记录”将无法进行任何本地结果合并。
历史记录上的查询缓存
较大的生产集群应仅在历史记录上启用缓存,以避免必须使用Broker合并所有查询结果。启用历史记录而不是代理缓存,可以使历史记录执行自己的本地结果合并,并减轻代理的负担。
Druid代理不会直接在OS页面缓存中执行任何操作,如果 操作系统提供了比基于内存更大的虚拟内存 要求分配堆。