ElasticSearch 进阶应用


随着互联网的发展,各类数据库以及模型层出不穷,可谓让开发者眼花缭乱不知如何抉择。

对于传统的 OLTP(Online Transaction Processing) 关系型数据库例如 MySQLOracle 等凭借有效的事务性常作于项目基础数据库,而 Redis 此类数据库通过内存的高性能通常用于作为热点数据缓存节点。

那么问题来了?Elasticsearch 的优势是什么,又应该在何时引入项目又能解决什么难点?

一、存储机制

Elasticsearch 中,内存缓冲区和事务日志是确保数据可靠写入和实现“近实时”搜索的两个关键机制。

1. 内存缓冲区

在数据写入上通常可以分为两大类:有序和无序。

Kafka 的无序为例,数据直接添加至文件末端,数据间只存在先后关系而无其它关联。而常见的关系型数据库等存在索引需要将数据以一定规则进行存储,通常会采用缓存 + 异步写入的方式实现,例如 MySQL 中的 Change Buffer

Elasticsearch 中同样也不例外,当执行数据新增时,会先将数据写入到内存缓冲区中,避免即刻的硬盘 IO 耗时操作,同时也能够提高数据吞吐量。

2. 事务日志

事务日志是为了保证数据可靠性和持久性而存在的日志文件,每当数据写入内存缓冲区后,会根据特定间隔将数据刷入硬盘内。

Elasticsearch 中这个刷新的间隔通过 refresh_interval 参数进行管理,每个索引的刷新时间都是独立的,默认刷新时间为 1s

即当用户执行新增时,数据会先行写入内存缓存区中,内存缓冲区中的数据在 1s 内刷新到一个新的 ,并写入磁盘,而这默认 1s 的差额也是 Elasticsearch 被称为近实时搜索引擎一大原因。

二、应用场景

1. 集成模式

在实际的开发当中,与常见的 MySQL 的等即写即读不同,Elasticsearch 通常采用异步离线写入方式集成于项目。即利用 MySQLbinlog 等机制通过 CDC 的模式异步同步数据,而非采用实现的双写模式,从而进一步提高效率。

当然,对于实时性要求相对较高的场景,采用实时写入的方式也并无不妥。

2. 优势特点

回归到正题,Elasticsearch 拥有哪些优势,以及应该何时选择 Elasticsearch?

对于 MySQL 相比大家都并不陌生,其最基础的索引即通过索引建从而搜索定位到相应的数据记录,例如主键索引,而此类索引方式又称之为正向索引,通过唯一查询记录。

Elasticsearch 的优势之外在于支持反向搜索,即通过记录关键字反向查询唯一标识。最为常见的例子即全文搜索,若需要在 MySQL 等常见数据库中实现最简单的方式即通过 like %xxx% 实现模糊搜索,但存在索引失效所带来的性能问题。

Elasticsearch 的反向索引强大之处即可以通过分词器进行拆词为关键字,从而为关键字反向关联数据记录,从而实现快速的全文搜索能力。

3. 缺点不足

Elasticsearch 虽又有不菲的性能,但也并无铁板一块仍存在自身的不足之处。

在搜索查询上 Elasticsearch 能够表现出让人眼前一亮的效果,但在面对频繁的删改时却稍逊一筹。同样在事务管理上,并不能像传统的关系型数据一样强大,且其采用最终一致性模型,对于要求高一致性的数据处理或许并非最佳选择。

因此,基于 Elasticsearch 高效搜索的特性。其通常应用于全文搜索、日志分析以及大数据集的聚合分析之中,其中较为常见的一大应用即 ELK 日志管理,能够实现日志搜索检索。


文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录