除了Elasticsearch中的反向索引(它使搜索如此之快)外,内存中还加载了什么?

时间:2018-12-05 03:07:00

标签: elasticsearch elastic-stack elasticsearch-5

Elasticsearch内存中有哪些东西可以使搜索如此快速? 是所有json本身都在内存中,还是仅倒排索引和映射将在内存中24 * 7?

1 个答案:

答案 0 :(得分:1)

这是一个很好的问题,然后简而言之是:

不仅数据存储在内存中,Elasticsearch的搜索速度如此之快

不保证倒排索引总是存储在内存中。我没有找到直接的证明,所以我从以下推断:

  • 索引段可能未完全加载到内存中(请参见_cat/segments输出参数size.memory
  • Tune for search speed中的第一个建议是:
      

    将内存分配给文件系统缓存

这意味着Elasticsearch还以非常智能的方式将索引数据存储在磁盘上,因此文件系统本身可以通过经常访问的搜索来帮助它。

此类“生活骇客”之一是,对于映射中的每个字段,都有一个不同的倒排索引,如果经常查询,倒排索引将足够小以被FS有效地缓存(并且您从未查询过的字段只会占用磁盘空间。

Elasticsearch会在内存中存储原始JSON吗?

否,它将它们存储在名为_source的特殊字段中。检索它并不快,这就是scripts访问_source的执行速度可能会很慢的原因。

还有其他使Elasticsearch快速运行的数据结构吗?

是的,例如用于聚合的那些

  • doc_values,这是用于精确值字段的面向列的存储(此功能使Elasticsearch有点Columnar DB),但同样,它最初不在内存中并被“缓存”经常使用;
  • fielddata,除了text字段外,它的工作类似。它实际上存储在内存中,但是效率不高,并且默认情况下处于关闭状态。

Elasticsearch还可以做些什么来加快搜索速度?

它使用更多的缓存:Shard request cachingNode query cache。如您所见,它并不像“仅将数据放入内存”那样简单。

希望有帮助!