首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
ElasticSearch开篇ES的安装
ElasticSearch的基本概念与名词解析
ElasticSearch数据管理文档的基础操作
ElasticSearch全文搜索API实践
ElasticSearch之Term-Query-API实践
ElasticSearch组合查询
ElasticSearch推荐搜索选项Suggesters的API
ElasticSearch统计需求之聚合
ElasticSearch集群管理API的使用
ElasticSearch索引管理API的使用
ElasticSearch中Mapping的使用
ElasticSearch关系模型之嵌套类型和父子文档
ElasticSearch正排索引与倒排索引简介
ElasticSearch全文搜索之倒排索引的实现
ElasticSearch数据相似的依据之相关性评分
ElasticSearch词项生成器之分词器
ElasticSearch分布式之集群中常见问题与解决方案
ElasticSearch分布式文档搜索机制
ElasticSearch数据持久化之分布式文档的存储流程
ElasticSearch分页之from+size、search after、scroll api
ElasticSearch聚合分析的原理之聚合结果一定准确
ElasticSearch数据副本策略
ElasticSearch数据副本模型
ElasticSearch集群运维
ElasticSearch索引的生命周期ILM
ElasticSearch安全之集群安全
ElasticSearch异常管理之搭建ELK日志系统
当前位置:
首页>>
技术小册>>
ElasticSearch零基础到实战
小册名称:ElasticSearch零基础到实战
在Elasticsearch中,数据持久化主要有两种方式:一种是将数据存储在磁盘上的索引文件中,另一种是将数据存储在内存中的缓存中。而本文将主要讨论第一种方式,即分布式文档的存储流程。 **分布式文档存储的流程** Elasticsearch采用分布式文档存储的方式,即将数据分散存储在多个节点上,以保证数据的可靠性和高可用性。在存储一个文档时,Elasticsearch会首先将该文档进行分片,然后将每个分片存储在不同的节点上。 具体的流程如下: **分片** Elasticsearch将索引划分为多个分片,每个分片可以存储一定量的文档数据。分片的数量和大小可以在创建索引时进行设置,默认情况下一个索引会被分成5个分片。 **主分片和副本分片** 在分片的基础上,每个分片又会被复制成多个副本,以保证数据的可靠性和高可用性。其中,一个分片被称为主分片,其他的副本分片被称为副本分片。默认情况下,每个主分片会被复制一份副本。 **路由** 当一个文档需要被存储时,Elasticsearch会根据文档的ID和分片的数量计算出该文档应该存储在哪个主分片上。例如,如果一个索引有5个主分片,一个文档的ID为123456,那么该文档会被路由到分片2上。 **存储** 一旦确定了存储的分片,Elasticsearch会将该文档存储在主分片上,并将副本分片复制到其他节点上。在存储文档时,Elasticsearch会将文档的数据分成多个小块(默认大小为1KB),并将这些小块存储在磁盘上的文件中。同时,Elasticsearch还会将这些小块缓存到内存中,以提高搜索效率。 **索引刷新** 在存储完文档后,Elasticsearch会将文档所在的主分片标记为“dirty”,表示该分片中有未持久化的数据。而这些未持久化的数据将会在后续的索引刷新操作中写入到磁盘上的索引文件中。索引刷新操作会定期地将内存中的缓存写入到磁盘中,以保证数据的持久化。同时,索引刷新操作还会清除一些已经删除的文档数据和旧的版本信息,以释放磁盘空间。 **索引合并** 当一个分片中存储的文档数量达到一定阈值时,Elasticsearch会触发索引合并操作。索引合并操作会将多个小的索引文件合并成一个大的索引文件,以提高搜索效率和节约磁盘空间。同时,索引合并操作还可以清除一些已经删除的文档数据和旧的版本信息,以释放磁盘空间。 代码示例 以下是一个简单的Java程序,演示了如何向Elasticsearch中存储一个文档: ```asp import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.rest.RestStatus; import java.io.IOException; public class ElasticsearchExample { public static void main(String[] args) throws IOException { // 创建连接 RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); // 创建文档 XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject(); { builder.field("title", "Elasticsearch数据持久化之分布式文档的存储流程"); builder.field("content", "本文介绍了Elasticsearch分布式文档存储的流程,并给出了相应的代码示例。"); } builder.endObject(); // 存储文档 IndexRequest request = new IndexRequest("my_index"); request.id("1"); request.source(builder, XContentType.JSON); IndexResponse response = client.index(request); // 输出结果 if (response.status() == RestStatus.CREATED) { System.out.println("文档存储成功!"); } else { System.out.println("文档存储失败!"); } // 关闭连接 client.close(); } } ``` 在上述代码中,我们首先创建了一个连接到Elasticsearch的客户端对象RestHighLevelClient,然后使用XContentBuilder构建了一个文档对象,并指定了该文档应该存储在名为“my_index”的索引中,ID为“1”。接着,我们使用IndexRequest将该文档存储到Elasticsearch中,并获取了一个IndexResponse对象,通过该对象可以判断文档是否存储成功。
上一篇:
ElasticSearch分布式文档搜索机制
下一篇:
ElasticSearch分页之from+size、search after、scroll api
该分类下的相关小册推荐:
ElasticSearch入门与实践