1.1 Elasticsearch简介

Elasticsearch简称ES,是世界上非常受欢迎的开源的分布式搜索引擎。它使用Java语言,基于Apache Lucene开发,从2010年发布第一个版本至今已有十余年的历史。Elastic的中文含义是“有弹性的、可伸缩的”,顾名思义,你可以很方便地使用Elasticsearch提供的可扩展的企业级搜索服务。Elasticsearch的官方网站对它的解释是:Elasticsearch是一个分布式、RESTful的搜索和数据分析引擎。没错,它为我们提供的很重要的两大功能就是大数据搜索和分析服务。

如果你是软件开发人员,那么对关系数据库的使用应该不陌生。传统的关系数据库可以使用SQL(Structured Query Language,结构化查询语言)对数据进行查询和统计分析,但是在“大数据时代”,关系数据库在使用时存在明显的短板,导致它的应用存在一些缺点。

(1)性能差:当单表的数据量达到数百万条甚至数千万条时,即使采用一定的方法去优化SQL,查询速度依然可能很慢,这在很多业务场景中是不允许的。

(2)扩展难:关系数据库的集群不太容易搭建,即使采用了分表分库的中间件将数据库集群化,查询性能在很多业务场景中依然没有保障。

较之于关系数据库,Elasticsearch则存在几个明显的优点。

(1)高性能:由于Elasticsearch使用倒排索引(反向索引)作为存储结构并大量使用缓存机制,你可以非常快速地从海量的数据中查询出需要的结果。

(2)易扩展:如搭建多个Elasticsearch节点,使它们组成一个集群对外提供分布式的搜索服务,只需要简单地修改配置文件。

(3)容错性好:由于每个索引可以配置副本机制,即使Elasticsearch有部分服务器宕机也不用担心数据丢失。

(4)上手快:Elasticsearch拥有“开箱即用”的RESTful API,你只需要按照接口文档的说明正确地传递参数,就可以从Elasticsearch中读数据或向其中写数据,上手非常快。

Elasticsearch有以下几个典型的业务场景,可供开发者参考。

(1)在线实时日志分析:使用Elasticsearch分析线上日志是十分常见的操作,从最初的ELK(Elasticsearch、Logstash、Kibana)平台到如今的Elastic Stack都包含开箱即用的在线日志采集、存储、分析的功能,使用起来快捷、方便。

(2)物联网(internet of things,IoT)数据监控:对于各种传感器设备、可穿戴设备实时产生的各种需要监控和分析的数据,由于数据量很大且实时性要求较高,很适合用Elasticsearch来进行技术选型,Elasticsearch在智慧交通、智能家居、公共安全、运维监控等领域有着广泛的应用。

(3)文献检索和文献计量:Elasticsearch是一种出色的搜索引擎,很适合用于电子图书馆、论文检索系统所需的多样化信息检索服务,同时Elasticsearch强大的数据分析能力为文献计量提供了便利的统计接口。

(4)商务智能(business intelligence,BI)大屏展示:Elasticsearch通过有效的大数据分析和研判,使用多维度的钻取分析为用户提供决策支持和趋势预测,其在智慧公安、智慧交通、智慧水利等领域的大屏展示系统中应用尤其普遍。