爱喝咖啡的程序员 2020-04-09 23:53 采纳率: 0%
浏览 480

Elasticsearch 堆内存和OS Cache 以及搜索、聚合数据的实现原理问题

我有以下想法,不知道是否正确,请各位指教:
1. buffer和尚未写入系统缓存的index segment(就是一段倒排索引)存储在堆内存,其大小受jvm参数控制。
2. 系统缓存 OScache在这里可以被看做是"文件系统缓存",用于缓存打开后的segment file(段文件),存储在非堆内存,受操作系统控制。

非堆内存越大,能够打开并缓存的segment file(段文件)就越多,搜索和聚合时,能够直接从内存中获取的热数据也就越多(不需要通过IO,在磁盘中找到尚未打开的segment file,读取文件内容)。

搜索数据时,首先在OS Cache中进行搜索,如果找不到数据,则在磁盘中找到对应的index segment文件并打开,读取数据至堆内存中(ES由java开发,因此一定是读取到堆内存,而不是OS Cache),接着,在堆内存中对数据进行聚合、排序等操作,最后把数据返回给协调节点,整理后交给调用方。此外,新读取到堆内存的segment file会被Lucense缓存至OS Cache中(如果非堆内存不够用,则新按照写入时间顺序,放弃最早的数据,腾出空间,写入新数据)。

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料