ElasticSearch

一、ElasticSearch 的设计目标与哲学

1.1 核心问题定义(第一性原理)

ElasticSearch 解决的不是“存数据”,而是:

如何在海量数据上,低延迟地完成模糊搜索、相关度计算与聚合分析,并且可以横向扩展。

由此决定了 ES 的一切设计取舍。

1.2 三个基本假设

  1. **搜索比事务更重要**(Search > Transaction)
  2. **读多写少,允许近实时**(NRT 而非强一致)
  3. **数据规模一定会超过单机极限**(必须分布式)

这些假设直接否定了传统 OLTP 数据库的设计路径。


二、ES 的四大第一性模型(世界观层)

2.1 存储模型:不可变段(Immutable Segment)

本质动机

不可变性是 ES 高并发搜索的根基。


2.2 计算模型:Shard 级并行计算

推论


2.3 一致性模型:主分片 + 最终一致

本质取舍

用一致性换可用性与性能(CAP 中偏向 AP)。


2.4 扩展性模型:水平扩展优先

结论

分片数是一次性架构决策,不是运行期参数。


三、核心抽象模型(概念边界澄清)

3.1 概念层级映射

抽象层ES 概念本质含义
集群Cluster资源与状态一致性边界
节点Node计算与存储执行单元
索引Index逻辑数据集合
分片Shard并行与扩展单位
Segment不可变倒排索引文件
文档Document最小检索对象

Index ≠ Database,Shard ≠ Table Partition。


四、数据生命周期(从写入到消亡)

4.1 写入路径(近实时本质)

  1. 写入 Memory Buffer + Translog
  2. Refresh:生成可搜索 Segment(1s)
  3. Flush:Segment 持久化 + Commit Point
  4. Merge:后台合并段文件

关键认知


4.2 读取与搜索路径

搜索性能 ≈ Cache 命中率 × 并行度


五、分布式查询与算分模型

5.1 两阶段搜索模型

  1. Query Phase:每个 Shard 本地算分
  2. Fetch Phase:协调节点拉取文档

5.2 算分不准的根因

解决方案


六、数据建模的工程哲学

6.1 建模第一原则

  1. **为查询建模,而非为存储建模**
  2. **反范式优于范式**
  3. **写入成本 < 查询复杂度**

6.2 三种结构的取舍

模型使用场景代价
扁平文档默认选择写入冗余
Nested局部强关联查询慢
Parent-Child高频更新内存与算分成本高

七、资源与性能模型

7.1 三大瓶颈

7.2 缓存哲学

不给 OS 内存,就是主动放弃性能。


八、容量规划与演进策略

8.1 容量规划不是算公式

而是回答:

8.2 索引演进策略


九、治理、监控与系统稳定性

9.1 Cluster State 是核心共享资源

原则

减少变更频率,控制规模。

9.2 健康度认知


十、反模式(Anti-Patterns)


十一、ES 的能力边界

ES 适合

ES 不适合

关联内容(自动生成)