Elasticsearch内存中有哪些东西可以使搜索如此快速?
是所有json本身都在内存中,还是仅倒排索引和映射将在内存中24 * 7?
最佳答案
这是一个很好的问题,然后简而言之就是:
不仅仅是数据存储在内存中,Elasticsearch的搜索速度如此之快
不能保证倒排索引总是存储在内存中。我没有找到直接的证明,所以我从以下推断:
_cat/segments
输出参数size.memory
)Give memory to the filesystem cache
这意味着Elasticsearch还以非常智能的方式将索引数据存储在磁盘上,因此文件系统本身可以通过经常可访问的搜索来帮助它。
这样的“生活黑客”之一是,对于映射中的每个字段,都有一个不同的倒排索引,如果频繁查询,倒排索引将足够小以被FS有效地缓存(并且您从未查询过的字段只会占用磁盘空间)。
那么Elasticsearch会在内存中存储原始JSON吗?
不,它将它们存储在名为
_source
的特殊字段中。检索它并不很快,这就是为什么scripts访问_source
的执行速度可能会很慢的原因。还有其他使Elasticsearch快速运行的数据结构吗?
是的,例如,用于聚合的那些:
doc_values
,是精确值字段的面向列的存储(此功能使Elasticsearch有点Columnar DB),但是它又不是最初在内存中,并且在频繁使用时会被“缓存”; fielddata
,除了text
字段外,执行类似的工作;它实际上存储在内存中,但是效率不高,默认情况下处于关闭状态。 Elasticsearch还可以做什么来加快搜索速度?
它使用更多的缓存:Shard request caching和Node query cache。如您所见,它并不像“仅将数据放入内存”那样简单。
希望有帮助!
关于elasticsearch - 除了Elasticsearch中的反向索引(它使搜索如此之快)外,内存中还加载了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53624581/