在浏览 ElasticSearch 的权威指南时,我偶然发现了一些谜团。首先确定搜索是接近实时的,因为更改需要作为新段刷新到文件系统缓存中(默认情况下是每秒一次),只有在此之后它才能被搜索机制看到,并且不使用 fsync,因为这太昂贵了。
然后出现translog。出于某种原因,它可以用来进行实时 CRUD。因此引擎首先遍历文件系统缓存中它所知道的所有段,并将它发现的更改添加到事务日志中。如果 translog 可以实时保持最新,那么保持片段实时保持最新的内在问题是什么?是为了防止缓存中的段过多吗?
另外,为什么translog默认每5秒fsync一次没有问题,而segment却不行?