我在历史节点上存储了大约 10GB 的数据。但是,该节点的内存消耗约为 2GB。
当我启动一个选择查询时,在 30 多秒内第一次返回结果。接下来,它们排在第二位(因为经纪人缓存)。
我关心的是将任何查询的第一次选择减少到一秒钟。为了达到这样的性能,我认为历史节点将所有数据存储在内存中是一个好的开始。
问题:为了强制历史节点缓存所有数据在内存中的配置参数是什么?
我在历史节点上存储了大约 10GB 的数据。但是,该节点的内存消耗约为 2GB。
当我启动一个选择查询时,在 30 多秒内第一次返回结果。接下来,它们排在第二位(因为经纪人缓存)。
我关心的是将任何查询的第一次选择减少到一秒钟。为了达到这样的性能,我认为历史节点将所有数据存储在内存中是一个好的开始。
问题:为了强制历史节点缓存所有数据在内存中的配置参数是什么?
Druid 没有任何直接机制来强制缓存数据。要解决此问题,您可以尝试在启动时触发一些虚拟查询,这会将数据段加载到内存中。启动 druid 查询时,会出现各种级别的缓存:
前两个缓存是可配置的,可以根据需要打开/关闭,而页面缓存完全由底层操作系统控制。由于在您的设置中,您在历史上有大量可用内存,因此我建议您在启动时触发虚拟查询,该查询跨越所有历史段,这会将所有段数据放入页面缓存中,并且稍后触发的任何查询都将受益于此。
历史缓存和代理缓存不会缓存段的全部数据,而只会缓存每个段的查询结果,因此如果您的查询本质上是非常动态的并且每次都需要不同的聚合和过滤器,这些将无用。