大数据学习(33)—— ElasticSearch简介

ES跟前面的大数据技术不一样,它不是apache的项目,官网是开源搜索:Elasticsearch、ELK

Elasticsearch 是什么

官方原话:Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件。

Elasticsearch 可以做什么

  • 搜索网站:类似必应这样的搜索网站
  • Stack Overflow:用来搜索技术问题和代码
  • github:搜索开源项目
  • 电商网站:搜索商品信息
  • 日志分析:ELK擅长的领域

Elasticsearch 名词

索引(Index)

索引简单来说就是相似结构文档的集合,比如可以有一个客户索引,商品分类索引,订单索引。索引有一个名称,一个索引可以包含很多文档,一个索引就代表了一类相似的文档,比如说建立一个商品索引,里面可能就存放了所有的商品数据,也就是所有的商品文档。

ES的索引相当于关系型数据库中的“数据库”。

类型(Type)

在 6.0 之前,每一个索引是可以设置多个 Types 的,每个 Type 会拥有相同结构的文档,但是从 6.0 开始,Type 已经被废除。从 7.0 开始,一个索引只能创建一个 Type,也就是 _doc

ES的类型相当于关系型数据库中的“表”。

文档(Document)

ElasticSearch是面向文档的,文档是所有可搜索数据的最小单位。

ES的文档相当于关系型数据库中的“记录”。

在 ES 中文档会被序列化成 JSON 格式,保存在 ES 中,JSON 对象由字段组成,其中每个字段都有对应的字段类型(字符串/数组/布尔/日期/二进制/范围类型)。每个文档都有一个 Unique ID,可以自己指定 ID 或者通过 ES 自动生成。

集群(Cluster)

ES 集群是一个分布式系统,当集群中有节点服务停止响应的时候,整个服务还能正常工作。集群中有部分节点丢失的情况下,不会有数据丢失。

集群通过不同的名字来区分,默认的名字为 elasticsearch,可以在配置文件中进行修改,或者在命令行中使用 -E cluster.name=xxxx 进行设定,一个集群中可以有一个或者多个节点。

ES 集群有三种颜色来表示健康程度:

  • Green:主分片与副本都正常分配
  • Yellow:主分片全部正常分配,有副本分片未能正常分配
  • Red:有主分片未能分配(例如,当服务器的磁盘容量超过 85% 时,去创建了一个新的索引)

节点(Node)

节点其实就是一个 ES 实例,本质上是一个 Java 进程,一台机器上可以运行多个 ES 进程,但是生产环境一般建议一台机器上只运行一个 ES 实例。

每一个节点都有自己的名字,节点名称很重要(在执行运维管理操作的时候),可以通过配置文件进行配置,或者启动的时候 -E node.name=node1 指定。每一个节点在启动之后,会分配一个 UID,保存在 data 目录下。

默认节点会加入名称为 elasticsearch 的集群,如果直接启动很多节点,那么它们会自动组成一个 elasticsearch 集群,当然一个节点也可以组成一个 elasticsearch 集群。

分片(Shard)

由于单台机器无法存储大量数据,ES 可以将一个索引中的数据切分为多个分片(Shard),分布在多台服务器上存储。有了分片就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。

一个 ES 索引包含很多分片,一个分片是一个 Lucene 的索引,它本身就是一个完整的搜索引擎,可以独立执行建立索引和搜索任务。

分片分为两类,一类为主分片(Primary Shard),另一类为副本分片(Replica Shard)。主分片主要用以解决水平扩展的问题,通过主分片,就可以将数据分布到集群上的所有节点上,一个主分片就是一个运行的 Lucene 实例,当我们在创建 ES 索引的时候,可以指定分片数,但是主分片数在索引创建时指定,后续不允许修改,除非使用 Reindex 进行修改。副本分片用以解决数据高可用的问题,也就是说集群中有节点出现硬件故障的时候,通过副本的方式,也可以保证数据不会产生真正的丢失,因为副本分片是主分片的拷贝,在索引中副本分片数可以动态调整,通过增加副本数,可以在一定程度上提高服务查询的性能。这就是HDFS分片和副本的概念。

概念对比

ES RDBMS
Index DataBase
Type(6.0以上版本弃用) Table
Document Row
Field Column
Mapping Schema
DSL SQL

与关系型数据库的区别

ElasticSearch支持灵活的单个对象存储和快速搜索查询。但是它的代价是延迟、缺少多表连接和事务。

  • ES不支持原子事务,如果同时写多个索引,某处出现错误,不会回滚。
  • ES写入数据后,需要1秒左右的时间才能被查询到。
  • ES 没有 ORM,所以代码里基本上是查询的 JSON Query 满天飞,非常乱不说,还容易出错。
  • ES是倒排索引,关系型数据库是Btree索引。所以ES是写入慢,读取快。关系型数据库是写入快,读取慢。
  • ES对文档进行索引之前,文档必须先被反规范化,消除表关联以提升查询性能,但要保持数据一致性和实时性则更加困难。

posted on 2022-03-30 11:38  别样风景天  阅读(203)  评论(0编辑  收藏  举报

导航