ES是什么

ElastticSearch是基于Lucence的全文搜索引擎。

  • 一个分布式的实时文档存储,每个字段都可以被索引和存储
  • 一个分布式实时分析引擎
  • 能胜任上百个节点的拓展,支持PB级的结构化或非结构化的数据

ES和关系数据库对比

关系数据库 ES
数据库 索引
类型
文档

面向文档(最顶层的对象,对象内部可以嵌套),一个文档的元数据必须包含以下三个部分:
_index文档在哪存放_type文档表示的对象类别_id文档唯一标识

ES的并发控制是通过版本号这样的乐观策略来的

存储的数据行称为索引
倒排索引
文档对应关系数据库中的一行

查询语言(DSL:领域特定语言)

查询类型:

  • match查询

相关性匹配,不同于关系数据库的匹配,匹配之后每个结果有一个得分

聚合功能,类似关系数据库的group by

ES屏蔽了分布式系统的复杂性,在后台运行:类似于Kafka的partition和replication

  • 分配文档到不同的容器 或 分片 中,文档可以储存在一个或多个节点中
  • 按集群节点来均衡分配这些分片,从而对索引和搜索过程进行负载均衡
  • 复制每个分片以支持数据冗余,从而防止硬件故障导致的数据丢失
  • 将集群中任一节点的请求路由到存有相关数据的节点
  • 集群扩容时无缝整合新节点,重新分配分片以便从离群节点恢复
  • image.png
  • image.png
  • image.png

    ES文档存储

    文档如何确定所在分片
    对文档的id进行hash,然后对主分片的数量进行取余
    主分片如何与副分片交互
    协调节点,写和索引先主分片,然后从分片,读可以直接从分片