Elasticsearch原理

本文的内容主要来自《Elasticsearch权威指南》。

1.Elasticsearch简介

Elasticsearch是一个实时分布式搜索和分析引擎,它让你以前所未有的速度处理大数据成为可能。Elasticsearch是一个基于Apache Lucene的开源搜索引擎。Elasticsearch也使用Java开发并使用Lucence作为其核心来实现所能索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏 Lucene的复杂性,从而让全文搜索变得简单。

Elasticsearch具体以下几个特性

(1).   简单易学

Elasticsearch对初学者隐藏了复杂的搜索引擎理论,它开箱即用,只需很少的学习即可以生产环境中使用。所有的功能都被集成到一个服务里面,应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。

(2).   支持分布式的实时搜索

一般的搜索都可以实现秒级搜索,搜索结果在较短的时间内可以出来,从而实现实时查询。与Hadoop这种离线分析框架相比,Elasticsearch要快很多,。

(3).   支持集群和横向扩展

Elasticsearch支持结点集群和横向扩展,处理PB级结构化或非结构化数据。

Elastcisearch的缺点如下

(1).   数据膨胀

Elasticsearch是使用索引来提高查询速度,在数据量比较大的情况下,索引会占用很多存储空间,笔者做过的项目,1G的原始数据,录入Elasticsearch后,会变成8G。


2.Elasticsearch原理

Elasticsearch保存的是JSON类型的文档数据,文档归属于一种类型,而这些类型存在于索引中,我们可以画一些简单的对比图来类比传统关系数据库:


Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。

Elasticsearch原理_第1张图片

一个节点(node)就是一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,它们具有相同的cluster.name,它们协同工作,分享数据和负载。当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据。

一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。

分片可以是主分片(primaryshard)或者是复制分片(replicashard).索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。

复制分片只是主分片的一个副本,它可以防止硬件导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。

当索引创建完成的时候,主分片的数量就固定了的,但是复制分片的数量可以随时调整。

索引与主分片、复制分片的关系如下:

Elasticsearch原理_第2张图片


你可能感兴趣的:(java,缓存)