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个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐