2

在浏览 ElasticSearch 的权威指南时,我偶然发现了一些谜团。首先确定搜索是接近实时的,因为更改需要作为新段刷新到文件系统缓存中(默认情况下是每秒一次),只有在此之后它才能被搜索机制看到,并且不使用 fsync,因为这太昂贵了。

然后出现translog。出于某种原因,它可以用来进行实时 CRUD。因此引擎首先遍历文件系统缓存中它所知道的所有段,并将它发现的更改添加到事务日志中。如果 translog 可以实时保持最新,那么保持片段实时保持最新的内在问题是什么?是为了防止缓存中的段过多吗?

另外,为什么translog默认每5秒fsync一次没有问题,而segment却不行?

4

1 回答 1

0

段是不可变的。它们永远不会更新,而是与其他细分市场合并以形成更大的细分市场。通过拥有不可变的段,ElasticSearch 通过页面/文件缓存将缓存卸载到操作系统。

translog 充当仅附加缓冲区,一旦刷新,它就会被提升为持久段。

于 2015-04-26T13:25:38.467 回答