EleasticSearch综述(一)

        Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。EleasticSearch的特点如下:

  • 一个分布式的实时文档存储,每个字段可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

        由于Elasticsearch的功能强大和使用简单,维基百科、卫报、Stack Overflow、GitHub等都纷纷采用它来做搜索。现在,Elasticsearch已成为全文搜索领域的主流软件之一。

1. 安装

(1) Elastic的版本升级及重要版本的新特性

  • 0.4:2010年2月第一次发布
  • 1.0:2014年1月
  • 2.0:2015年10月
  • 5.0:2016年10月
  • 6.0:2017年10月
  • 7.0:2019年4月

新特性5.X 

  • Lucene 6.x(表示此时以来的Lucene版本)性能升级,默认打分机制从TF-IDF(计算分词相似的一个算法)改为BM 25
  • 支持Ingest节点/Painiess Scripting / Completion suggested支持 / 原生的Java REST客户端
  • Type标记成deprecated(过时,以前我们在创建索引的时候是需要创建一个Type标记的,现在可以不创建它),支持了keyword类型
  • 性能优化:
  • ① 内部引擎移除了避免同一文档并发更新的竞争锁,带来15% - 20%的性能提升
  • ② 支持分片上聚合的缓存
  • ③ 新增了Prefile API

新特性6.X

  • Lucene 7.x
  • 新功能:
  • ① 跨级群复制(CCR)
  • ② 索引声明周期管理
  • ③ SQL的支持
  • 更友好的升级及数据迁移:
  • ① 在主要版本之间的迁移更为简化,体检升级
  • ② 全新的基于操作的数据复制框架,可加快恢复数据
  • 性能优化:
  • ① 有效存储稀疏字段的新方法,降低了存储成本
  • ② 在索引时进行排序,可加快排序的查询性能

新特性 7.X

  • Lucene 8.0
  • 重大改进 - 正式废除单个索引下多Type的支持
  • 7.1开始,Security功能免费使用
  • ECK - Elasticsearch Operator on Kubernetes
  • 新功能:
  • ① New Cluster coordination
  • ② Feature-Complete High Level REST Client
  • ③ Script Score Query
  • 性能优化:
  • ① 默认的Permary Shard数从5改为1,避免Over Sharding
  • ② 性能优化,更快的Top K

        目前ES6 和 ES7使用较为广泛, 本博客主要介绍ES6的相关特性

(2) 准备

        长度ElasticSearch6.3.2下载地址(Linux macOS Windows通用, 下载zip包, 之后解压即可) https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-3-2. ES的其他版本下载页面: https://www.elastic.co/cn/downloads/past-releases#elasticsearch

(3) 安装

        在上述下载地址下载完elasticsearch-6.3.2.tar.gz之后, 首先登录当前用户的home下创建一个settings目录(可以视自己情况而定), 通过tar -zxvf elasticsearch-6.3.2.tar.gz解压到当前目录.

        进入elasticsearch-6.3.2目录, 执行 ./bin/elasticsearch 命令, 等待一小段时间, 通过浏览器访问: http://localhost:9200/?pretty, 出现以下响应即可:

{
    "name": "x4x7wWJ",
    "cluster_name": "elasticsearch",
    "cluster_uuid": "sJ6LTYJ1TDmtR1kzl0M2Ig",
    "version": {
        "number": "6.3.2",
        "build_hash": "8bbedf5",
        "build_date": "2017-10-31T18:55:38.105Z",
        "build_snapshot": false,
        "lucene_version": "6.6.1"
    },
    "tagline": "You Know, for Search"
}

2. 基本概念

       ES是一个搜索引擎, 同时也是一个分布式文档存储数据库. 为了保证后续的实战教程顺利进行, 这里通过对比传统的关系型数据库MySql介绍在ES的一些术语.

        在MySql中有数据库(Database), 表(table), 行(Row), 列(Column)的概念, 同样在ES中也有类似的概念, 索引(Index), 类型(Type), 文档(Document), 字段(Field).

        可以做类比:

 数据库
MySqlDBTableRowColume
ESIndexMappingDocumentField

索引Index

        ES中的索引概念不是关系型数据库中的索引, 而是指存数据的地方, 类似于关系型数据库中数据库的概念.

类型Type

        有的文章说ES中的类型Type对应的是关系型数据库中的表, 在使用ES中我们会遇到另外一个概念映射(Mapping), 大部分文档都认为映射(Mapping)才是真正的对应关系型数据库中的表. 

        实际上ES中Type的概念已经名存实亡了,后期的版本中越来越被弱化, 在未被ES正式移除之前, ES后期版本已经不允许一个索引Index创建多个Type了, 在ES7中已经移除了Type, 而ES6只允许一个Index创建一个Mapping.

        如果现阶段一定要理解ES中的Type, 那么一定要和Mapping结合起来. 可以理解为类型Type就是定义一个表而已, 而映射Mapping定义了表结构, 包括哪些列, 哪些行.

文档Document

        在非关系型数据库中, 有部分被称之为"文档数据库", 对应于关系型数据库中的一行记录.

字段Field

        对应关系型数据库中的列.

节点

        一个ES实例称之为一个节点, 单机部署的ES有且只有一个节点, 集群部署的ES有多个节点且只有一个主节点.

分片

        ES作为分布式集群部署, 同样也可以作为单机节点部署. ES中数据被分散存储在分片中, ES屏蔽了底层的分片实现, 我们直接与索引交互而不与分片交互. 分片数量的多少与是否是集群部署和单机部署无关, 即使是单机部署在创建索引的时候也可以制定多个分片(默认是5个主分片, 1个备份(包含5个备分片)). 分片有主分片和备份片之分, 顾名思义, 备份片是主分片的备份, 当主分片出现故障, 备份片充当主分片.

单机部署

        单机部署的ES, 即ES只有一个节点, 在创建索引时, 如果不指定主分片和备份片的数量, 默认创建5个主分片, 5个备份片, 实际上对于单机而言多个主分片并无多大意义, 因为主备都在一个节点机器上, 如果主分片故障, 备分片也同样会故障.

集群部署

        对于集群部署的ES来讲, 此时存在多个节点, 主分片的分配与备分片机制就显得尤为重要. 例如现在又3个节点, 此时如果在创建索引时只分配1个主分片就显得有点浪费. 主分片的划分更多是取决于用户的数量和节点的数量. 通常来讲, 分片数量越多越好, 因为这样能将数据分散到不同分片, 以便于以后在扩容新增节点时, ES能自动将分片重新均匀分布. 但这也不是绝对的, 例如有3个节点, 100个分片, 每个节点就33个分片, 当搜索请求调度到同一节点的不同分片时, 此时就会引发硬件资源争夺, 造成性能问题. 反过来, 如果3个节点只分配3个分片, 随着业务增长, 数据量增大, 单个分片已不能承载它最大的数量, 此时就算新增节点, 但是分片数量就3个, 分片的数量在创建索引时便确定且不可修改, 此时只能重新创建索引.

        既要对合理的数据增长有一个判断, 又要对期望有一度的把握. 官方给出的建议, 每个分片的数量最好在20G~40G, 这就意味着如果你有4个节点, 数量预估在200G左右甚至更大, 此时分片数量设置为5~10个比较合适, 7或8个差不多, 每个节点2个分片.

        上面谈到主分片, 副分片划分同等重要. 如果不对主分片备份, 主分片故障则会导致数据丢失, 部分数据不可查询. 副本分片设置过多会造成额外的存储空间, 默认情况下, 创建索引时会创建一个分片副本.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值