网站开发的毕设开题报告,包头网络推广公司,常州公司网站模板建站,什邡网站建设前言#xff1a;本篇博客将介绍Elasticsearch的数据底层原理#xff0c;涉及数据写入的过程以及相关概念。我们将深入探讨buffer、translog、refresh、commit、flush和merge等核心概念#xff0c;帮助您更好地理解Elasticsearch的数据存储机制。
写入数据的基本过程 Elast…
前言本篇博客将介绍Elasticsearch的数据底层原理涉及数据写入的过程以及相关概念。我们将深入探讨buffer、translog、refresh、commit、flush和merge等核心概念帮助您更好地理解Elasticsearch的数据存储机制。
写入数据的基本过程 Elasticsearch是一个分布式搜索引擎数据写入的基本过程如下 数据首先被写入buffer此时数据在buffer中是无法被搜索到的。同时数据也会被写入translog日志文件以实现数据的持久化。 当buffer快要写满或经过一定时间后会执行refresh操作将buffer中的数据刷新到一个新的segment文件中。这个刷新的过程实际上是将数据先写入操作系统缓存os cache中。每隔1秒钟Elasticsearch将buffer中的数据写入一个新的segment文件因此每秒钟会产生一个新的segment文件。如果buffer中没有数据则不会执行refresh操作仅会创建一个空的segment文件。只有当数据被刷新到os cache中才能被搜索到。 一旦数据进入os cache该segment文件中的数据就可以被搜索引擎提供给外部使用。 以上过程会不断重复进行新的数据不断进入buffer和translog并被写入一个又一个新的segment文件。每次refresh操作完成后buffer会被清空而translog保留。随着数据写入的推进translog的大小会越来越大。当translog达到一定长度时会触发commit操作。 在commit操作中首先将buffer中的现有数据刷新到os cache中然后清空buffer。 接下来将一个commit point写入磁盘文件其中包含了该commit point对应的所有segment文件。 最后强制将os cache中的所有数据通过fsync操作刷写到磁盘文件中。
Translog日志文件的作用
Translog日志文件的作用是在执行commit操作之前将数据写入专门的日志文件。无论数据是停留在buffer还是os cache中都是存储在内存中的。一旦机器宕机内存中的数据将会丢失。
为了防止数据丢失需要将数据对应的操作写入translog日志文件。在机器重启时Elasticsearch会自动读取translog日志文件中的数据并恢复到内存的buffer和os cache中。
Commit操作和Flush操作
Commit操作是指
写入commit point用于标识该commit point所对应的所有segment文件。将os cache中的数据通过fsync操作强制刷写到磁盘文件。清空translog日志文件。
Flush操作是对应commit操作的全过程。通过手动执行Flush操作可以将os cache中的数据通过fsync操作强制刷写到磁盘文件中并记录一个commit point同时清空translog日志文件。
删除操作和更新操作
删除操作在执行commit操作时会生成一个.del文件其中标识某个文档为已删除状态。搜索时根据.del文件可以知道该文档已被删除。更新操作将原始文档标识为已删除状态然后写入新的数据。
Segment文件的管理与Merge操作 每次refresh操作会产生一个新的segment文件因此默认情况下每秒钟会创建一个新的segment文件。随着时间推移segment文件会越来越多。为了优化性能Elasticsearch会定期执行merge操作。 Merge操作将多个segment文件合并为一个并压缩数据以减少磁盘空间的使用。合并后的segment文件可以提高搜索性能减少磁盘的随机访问。 Merge操作分为两个阶段合并Merge和删除Delete。 合并阶段将多个segment文件合并为一个新的segment文件。在合并的过程中相同文档ID的数据将会被合并为最新版本删除标记将会被应用。合并操作会减少segment文件的数量提高搜索性能。 删除阶段在合并后的segment文件中已被标记为删除的数据将会被真正地删除释放磁盘空间。 Merge操作是一个耗时的过程会占用CPU和磁盘IO资源。为了避免对搜索性能产生负面影响Elasticsearch会在后台异步执行Merge操作。 Merge操作的频率和合并策略可以通过配置进行调整以满足不同场景的需求。
这就是Elasticsearch数据写入的底层原理。通过理解这些核心概念您可以更好地管理和优化Elasticsearch集群的性能和存储空间使用。