Druid:它如何使用缓存和 OS 页面缓存?
Druid: how it uses cache and OS page cache?
我观察到 Druid 查询性能可以从以前的查询中受益。因此,我试图了解原因。
我知道 Druid 使用缓存(我在 Broker 中使用缓存),但是这个缓存只是存储每个段的查询结果(对吗?)。但是,我注意到如果后续查询使用相同的段,性能会提高。
示例:
- Select sum(metric), dimteste2, dimteste3 来自 table x where dimteste='x' group by dimteste2, dimteste3 -> 2 seconds
- Select sum(metric), dimteste2, dimteste3 from table x where dimteste3='y' group by dimteste2, dimteste3 -> 0.5 seconds
我搜索了一下,发现这个行为可以通过OS页面缓存来实现。根据我的研究,我认为德鲁伊在第一次查询数据源期间,将必要的段加载到内存(OS 页面缓存)。并且在接下来的查询中可以更快地读取这些段。
我说的对吗?
我查看了 Druid 文档,但找不到任何有用的信息。
你能帮我解释一下这个令人敬畏的行为吗?
此致,
何塞·科雷亚
Druid 确实使用缓存来提高各个级别的性能。在 segment level 上的 historicals 和 druid query level 上的 broker。你给它的内存越多,它工作得越快。
下面是关于缓存的文档 -
查询缓存
Druid 支持通过 LRU 缓存对查询结果进行缓存。结果存储在每个段的基础上,连同给定查询的参数。这允许 Druid return 最终结果部分基于缓存中的段结果,部分基于扫描 historical/real-time 段的段结果。
段结果可以存储在本地堆缓存或外部分布式 key/value 存储中。可以在 Historical 和 Broker 级别启用段查询缓存(不建议在两者上都启用缓存)。
代理上的查询缓存
在 broker 上启用缓存可以产生比在 Historicals 上为小型集群启用查询缓存更快的结果。这是较小的生产集群(< 20 台服务器)的推荐设置。请注意,当在 Broker 上启用缓存时,Historicals 的结果将 return 按每个段进行编辑,并且 Historicals 将无法进行任何本地结果合并。
历史查询缓存
较大的生产集群应该只在历史上启用缓存,以避免必须使用 Brokers 来合并所有查询结果。在 Historicals 而不是 Brokers 上启用缓存使 Historicals 能够进行自己的本地结果合并,并减轻 Brokers 的压力。
Druid broker doesn't do anything directly at the OS page cache, if
there is virtual memory available by the os, than based on memory
requirements the heaps are allocated.
我观察到 Druid 查询性能可以从以前的查询中受益。因此,我试图了解原因。 我知道 Druid 使用缓存(我在 Broker 中使用缓存),但是这个缓存只是存储每个段的查询结果(对吗?)。但是,我注意到如果后续查询使用相同的段,性能会提高。
示例:
- Select sum(metric), dimteste2, dimteste3 来自 table x where dimteste='x' group by dimteste2, dimteste3 -> 2 seconds
- Select sum(metric), dimteste2, dimteste3 from table x where dimteste3='y' group by dimteste2, dimteste3 -> 0.5 seconds
我搜索了一下,发现这个行为可以通过OS页面缓存来实现。根据我的研究,我认为德鲁伊在第一次查询数据源期间,将必要的段加载到内存(OS 页面缓存)。并且在接下来的查询中可以更快地读取这些段。
我说的对吗? 我查看了 Druid 文档,但找不到任何有用的信息。
你能帮我解释一下这个令人敬畏的行为吗?
此致,
何塞·科雷亚
Druid 确实使用缓存来提高各个级别的性能。在 segment level 上的 historicals 和 druid query level 上的 broker。你给它的内存越多,它工作得越快。
下面是关于缓存的文档 -
查询缓存
Druid 支持通过 LRU 缓存对查询结果进行缓存。结果存储在每个段的基础上,连同给定查询的参数。这允许 Druid return 最终结果部分基于缓存中的段结果,部分基于扫描 historical/real-time 段的段结果。
段结果可以存储在本地堆缓存或外部分布式 key/value 存储中。可以在 Historical 和 Broker 级别启用段查询缓存(不建议在两者上都启用缓存)。
代理上的查询缓存
在 broker 上启用缓存可以产生比在 Historicals 上为小型集群启用查询缓存更快的结果。这是较小的生产集群(< 20 台服务器)的推荐设置。请注意,当在 Broker 上启用缓存时,Historicals 的结果将 return 按每个段进行编辑,并且 Historicals 将无法进行任何本地结果合并。
历史查询缓存
较大的生产集群应该只在历史上启用缓存,以避免必须使用 Brokers 来合并所有查询结果。在 Historicals 而不是 Brokers 上启用缓存使 Historicals 能够进行自己的本地结果合并,并减轻 Brokers 的压力。
Druid broker doesn't do anything directly at the OS page cache, if there is virtual memory available by the os, than based on memory requirements the heaps are allocated.