【ELK】核心概念
参考:
https://elasticstack.blog.csdn.net/ ES官方博客,详细,推荐
https://elasticstack.blog.csdn.net/article/details/102728604 Elastic:开发者上手指南(推荐,梳理整个ES Stack的各个产品博客的使用,包括各种材料链接)
https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html 官方文档
https://www.cnblogs.com/skychen1218/p/15720522.html 实战参考:记一次引入Elasticsearch的系统架构实战
引入ES背景:DB不支持复杂查询,不适合大量的查询
优缺点:非关系型数据库,不支持ACID;非实时数据库(内部基于refresh机制更新);ES 宕机恢复后,数据存在丢失
存储模型(倒排索引):
Elastic Search内部基于Apache Lucene框架开发。
Lucene:将写入所有信息组成倒排索引(inverted Index)结构。将词项映射到文档;倒排索引:支持快速查询的关键
倒排索引:记录每个词条出现在哪些文档及文档中位置;涉及到原始数据按照算法进行分词,得到词条;
创建索引过程
1、创建文档列表:Lucene对原始文档数据编号(DocId),形成文档列表
2、创建倒排索引列表:对文档中数据进行分词,得到词条,以词条建立索引,记录下包含词条的所有文档编号。
概念对比(ES vs Mysql):
数据类型
text:需要用于全文搜索(会被分词), 比如产品名称、产品描述信息, 就应该使用text类型.
keyword:需要按照精确值进行过滤、排序、聚合等操作时, 就应该使用keyword类型。不会被分词
数字类型:尽可能选择范围小的数据类型, 字段的长度越短, 索引和搜索的效率越高;
date:
boolean
binary:
range:
建索引:只发生在主分片,而不是副本。当发请求给只有副本的节点时,请求会被转发拥有正确主分片的节点。
查询:分为scatter phase和gather phase; Scatter将query分发包含相关文档多个分片查询;gather 从众多分片中收集结果并合并、排序 ---》每个分片都会返回查询数量的数据,最终在整合阶段排序,丢弃,所以要求分片查询不能太大,否则资源消耗多。
集群存储和检索原理
Lucene原理
Segment(Shards) -> Document(行)-> Field(列)
添加索引
索引只是一个用来指向一个或多个分片的逻辑命名空间
一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序直接与索引通信。
分片是Elasticsearch在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片中,然后分片分配到你集群中的节点上。当你的集群扩容或缩小,Elasticsearch将会自动在你的节点间迁移分片,以使集群保持平衡。
分片可以是主分片(primary shard)或者是复制分片(replica shard)。你索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况。分片的最大容量完全取决于你的使用状况:硬件存储的大小、文档的大小和复杂度、如何索引和查询你的文档,以及你期望的响应时间。
复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。
默认情况下,一个索引被分配5个主分片
状态绿色:集群功能完备且高可用
横向扩展:
当节点1故障时,自动将节点2为master。
因为配置复制系数是2,但当前只有1个复制分片,所以状态是黄色。
集群部署
管理节点:集群中有一个节点被选为管理节点,负责集群状态管理和集群拓扑变化时做出反应,分发索引分片至集群相应节点上。
所有请求可发送至任意节点,如果有需要任意节点可并行发送子查询给其他节点,并合并搜索结果返回。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)