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