Elasticsearch 数据写入流程
时间: 2024-01-14 10:00:23 浏览: 57
Elasticsearch 的数据写入流程如下:
1. 客户端向 Elasticsearch 发送写入请求。
2. Elasticsearch 的节点接收请求并将其路由到正确的分片上。
3. 分片将文档写入本地的 translog(事务日志)中,以确保数据在写入索引前不会丢失。
4. 分片将文档写入内存缓冲区中,该缓冲区将在达到一定大小或一定时间后刷新到磁盘上的倒排索引中。
5. 当内存缓冲区被刷新到磁盘上的倒排索引后,分片会向主分片发送复制请求,以确保数据的冗余备份。
6. 主分片将复制请求转发给其它副本分片进行备份。
7. 当所有分片成功写入文档并复制到其它副本后,Elasticsearch 会向客户端发送响应,表示写入请求已完成。
以上是 Elasticsearch 的一般写入流程,但还有一些优化机制,如使用 refresh_interval 设置刷新间隔,使用 bulk API 批量写入等等,以提高写入性能和效率。
相关问题
es数据节点存储数据的详细流程
1. 数据写入
当用户写入数据时,数据首先会被发送到ES客户端节点。ES客户端节点会将数据分片并将其发送到对应的ES数据节点。数据节点收到数据后,将其存储在本地存储中。
2. 数据索引
在存储数据之前,数据节点会将数据进行索引。索引是将数据结构化并建立索引以便后续快速搜索的过程。数据节点使用Lucene搜索引擎来执行这个过程。索引包括数据字段和相关信息,例如数据类型和时间戳。
3. 数据分片和复制
ES数据节点会将数据分片并在集群中的不同节点之间复制。这样做的目的是提高数据可靠性和可用性。数据节点使用一致性哈希算法将数据分配到不同的节点,并在多个节点之间进行复制。这样,即使某个节点发生故障,数据仍然可以从其他节点中检索。
4. 数据搜索
当用户执行搜索操作时,搜索请求将被发送到ES客户端节点。客户端节点将搜索请求发送到所有包含相关数据的节点。每个节点使用其本地索引来执行搜索操作,并将搜索结果返回给客户端节点。客户端节点将所有结果汇总并返回给用户。
5. 数据删除
当用户删除数据时,删除请求将被发送到ES客户端节点。客户端节点将删除请求发送到包含相关数据的所有节点。每个节点使用其本地索引来查找和删除相关数据。删除操作不会立即从磁盘中删除数据,而是将其标记为已删除。ES后台进程负责清理已删除的数据。
总结:
ES数据节点存储数据的流程包括数据写入、数据索引、数据分片和复制、数据搜索和数据删除。数据节点使用Lucene搜索引擎进行索引,并将数据分配到不同的节点并在多个节点之间进行复制以提高数据可靠性和可用性。当用户执行搜索操作时,搜索请求将被发送到所有包含相关数据的节点,并汇总搜索结果返回给用户。当用户删除数据时,删除请求将被发送到所有包含相关数据的节点,并将数据标记为已删除,ES后台进程负责清理已删除的数据。
skywalking9.3.0源码中涉及到数据持久化到es7数据库的方法有哪些 具体流程是怎样的 es的文档写入api的具体位置和方法名都是什么
在SkyWalking 9.3.0中,涉及到数据持久化到ES7数据库的方法有:
1. Trace数据的写入:在org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.dao.TraceEs7DAO类中,通过Elasticsearch High Level REST Client使用Index API将Trace数据写入到ES7中。
2. Metric数据的写入:在org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.dao.MetricEs7DAO类中,通过Elasticsearch High Level REST Client使用Bulk API将Metric数据批量写入到ES7中。
具体流程如下:
1. 当SkyWalking收集到Trace或Metric数据时,会将数据传递给对应的DAO类。
2. DAO类通过Elasticsearch High Level REST Client连接到ES7,构建对应的IndexRequest或BulkRequest对象。
3. 将数据写入ES7。
4. 如果写入失败,则会进行重试。
ES的文档写入API的具体位置是https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.0/java-rest-high-document-index.html,方法名是index。