Elasticsearch 是一个分布式搜索引擎。
- 使用 Java 开发,跨平台。
- 近实时搜索。
- 分布式。
基本概念
近实时搜索,near real-time (NRT) search
https://www.elastic.co/docs/manage-data/data-store/near-real-time-search
集群,cluster
节点,node
索引,index
索引是文档集合,索引具有 mapping 和 setting,mapping 定义 index 中 document 类型,setting 用来定义数据分片信息。
分片,shard
分片分为主分片(primary shard)和副本分片(replica shard)。分片设计有利于:
- 高可用:当分片或节点故障时,副本可以继续提供服务。副本分片永远不会与其对应的主分片分配到同一个节点上。
- 横向扩展查询吞吐量:搜索操作可以在所有主/副分片上并行执行,从而提升整体查询并发能力。
- 横向扩展存储数据量:写操作的数据会被存储在多个主分片上,主分片可以分散在各个节点,从而提升单个索引数据存储能力。
每个索引可以被拆分为多个分片(主分片),该索引可以有零个或者多个副本。分片数和副本数只能在索引创建时指定,索引创建后,分片数无法动态调整,只能 reindex,副本数可以动态调整。默认情况下,每个索引会被设置 5 个分片和 1 个副本,共计 10 个分片,其中 5个 主分片,5 个副本分片(一个完整副本)。
一般建议:单个分片建议为30GB到50GB。ElasticSearch推荐的最大JVM堆空间是30~32G, 所以把你的分片最大容量限制为30GB, 然后再对分片数量做合理估算. 例如, 你认为你的数据能达到200GB, 我们推荐你最多分配7到8个分片.
类型,type
type 为 index 中相同 document 的类型。
文档,document
document 在elasticsearch 中以 JSON 的格式存在,document 由若干字段构成,字段与MySQL中列概念类似。