search(1)- elasticsearch结构概念
上篇提到选择了elasticsearch ES作为专业化搜索引擎的核心,这篇讨论一下ES的基本结构和应用概念。首先,从硬结构方面来讲:ES是在一个集群(cluster)环境里运行的,所以ES应该具备高可用和高扩展特性,因为系统可以分布在机器内无数个节点(node)服务器上运行。ES的索引(index)分布在集群中各node上。ES的index又可以向下分成多个shard分片。因为ES是基于lucent的,ES的shard就是一个完整的lucent index。所以,ES index是一个shard集合,也就是lucent index集合。在定义ES index时必须指定该index的shard(primary)数量,之后不得修改。这就意味着每个ES index需要占用一个以上shard,而shard是ES index操作的最小单元,也就是说一个shard只能存放一种ES index索引文件(document)。
在ES7之前的版本表面上每个index里又分不同的document type,可以分辨不同类型的document。但因为ES index是shard集合,或者lucent index集合,而lucent index并没有document type的概念,基本上是一种nosql (schemaless)存储结构,所以ES7之后就取消了_type这层,其结果就变成每个ES index只能容许一种document操作。
很多人认为ES也是数据库系统,ES7之前普遍认识是:index -> database, type -> table, document -> row。ES7之后在某种意义上index就是table了。所以:把ES作为应用系统的数据库来使用是大大不妥的。因为应用系统由众多数据表组成关系数据库,在ES上就意味着必须构建众多的index,会出现大量的细小shard(table)分布在集群节点上,严重影响效率。
ES7是个集群体系:cluster->nodes->index->shards。shard又分primary shard和replica shard (pshard,rshard)。一般来说pshard和rshard相互应分布在不同的node上。所有写操作由pshard负责,或者说先在pshard上执行后再把结果分发到隶属各rshard。读取操作采取就近读取策略以实现快速响应。
ES的底层操作是由lucent实现的。在lucent操作时shard又被细分一层到segment:luccent shard是由多个segment组成的,lucent的写操作先写入一块缓存(write-buffer),然后以一种提交形式再以一个segment为单元存写入shard。
ES是某种nosql数据库,但在存写数据时又对数据,特别是字符text类型的数据进行了分拆处理,所以ES存写即是更新索引indexing。从另一个角度说明:ES是一个索引容器(index container),是一个完整封闭的容器。index的构建、维护、使用等都是通过ES提供的一些工具软件以及一套HTTP-api来实现的。数据输入可以用工具(如logstash)进行批次型的indexing,实时indexing是通过HTTP-api实现的。
ES自带一套REST-api可以对index进行更新、搜索、统计、提取。
ES-REST-api的功能可以说是相当全面,但复杂、不易掌握、使用要求门槛高,且不易作为系统整合工具。为了实现ES在行业IT系统的普遍应用,应该绕过复杂的ES-REST-api,在ES之上设计一套连接ES-HTTP通道的REST-api作为ES和前端(web,mobile)的桥梁,把前端搜索条件翻译成ES JSON格式的搜索指令发送至ES,然后对搜索结果进行简化、筛选处理,以某种简洁通用的格式呈现给前端。最终目的其实是为了降低前端开发人员引用ES的技术门槛。
search(1)- elasticsearch结构概念的更多相关文章
- ElasticSearch 全文检索— ElasticSearch 核心概念
ElasticSearch核心概念-Cluster 1)代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是去中心化,字 ...
- Elasticsearch入门教程(二):Elasticsearch核心概念
原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...
- ElasticSearch 核心概念
ElasticSearch核心概念-Cluster ElasticSearch核心概念-shards ElasticSearch核心概念-replicas ElasticSearch核心概念-reco ...
- ELK 学习笔记之 elasticsearch基本概念和CRUD
elasticsearch基本概念和CRUD: 基本概念: CRUD: 创建索引: curl -XPUT 'http://192.168.1.151:9200/library/' -d '{" ...
- 【ElasticSearch】概念
小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了. 对小史面试情况感兴趣的同学可以观看面试现场系列. 随着央视诗词大会的热播,小史开始对诗词感兴趣 ...
- Elasticsearch基本概念和使用
Elasticsearch基本概念和使用 1.操作索引 1.1.基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的. 对比关系: 索引( ...
- Elasticsearch核心概念
Elasticsearch 核心概念 Cluster 代表一个集群, 集群中有多个节点, 其中一个为主节点, 该节点可以通过选举产生.(主从节点只针对于集群内部) 去中心化: 对于集群外来说无中心节点 ...
- ElasticSearch 基本概念 and 索引操作 and 文档操作 and 批量操作 and 结构化查询 and 过滤查询
基本概念 索引: 类似于MySQL的表.索引的结构为全文搜索作准备,不存储原始的数据. 索引可以做分布式.每一个索引有一个或者多个分片 shard.每一个分片可以有多个副本 replica. 文档: ...
- elasticsearch基本概念与查询语法
序言 后面有大量类似于mysql的sum, group by查询 elk === elk总体架构 https://www.elastic.co/cn/products Beat 基于go语言写的轻量型 ...
随机推荐
- hashCode() 和 equals()比较
1. 首先equals()和hashCode()这两个方法都是从Object类中继承过来的. equals()方法在Object类中定义如下: public boolean equals(Object ...
- TCP/IP 协议栈初识
原文:深入浅出 TCP/IP 协议栈 0. 简介 TCP/IP 协议栈是网络通信中一系列网络协议的综合,是核心骨架.它定义了电子设备接入因特网.以及数据在它们之间的传输方式,是一份标准.TCP/IP ...
- 转:zabbix 更改maps图标
更改Zabbix map图标 Zabbix的maps用来图形化显示监控设备的拓扑图,并且以不同的标记显示故障事件,通过该图表很直观的显示设备的整体情况.系统默认的图标比较简陋,如图十一所示.通过更改系 ...
- Google Play来华 象征意义 跳板而已
Play来华 象征意义 跳板而已" title="Google Play来华 象征意义 跳板而已"> 每当有大事发生,伴随的就是接连不断的小道消息传出来.就像苹 ...
- Python---9高级特性
一.切片 取一个list或tuple的部分元素是非常常见的操作.比如,一个list如下: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', ' ...
- 测试工程师不懂AI,还有未来吗?
阿里妹导读:近几年人工智能.机器学习等词漫天遍地,似乎有一种无AI,无研发,无AI,无测试的感觉.有人说:不带上"智能"二字,都不好意思说自己是创新.我们先暂且不评论对错,只探讨这 ...
- Ubuntu日常使用总结
Contents 使用了将近一年的Ubuntu,感觉不用windows也可以处理日常的事务.并且我相信只要合理利用Ubuntu,一定可以取代你手中的Windows.我不是说Ubuntu有多么好,只是从 ...
- mysql 分表实现方法详解
如果你需要进行mysql分表了我们就证明你数据库比较大了,就是把一张表分成N多个小表,分表后,单表的并发能力提高了,磁盘I/O性能也提高了.并发能力为什么提高了呢,因为查寻一次所花的时间变短了,如果出 ...
- 开发过程中关于JSON的那些事
在使用过程中,对JSON了解的还不够,特地整理一下,用于个人学习和知识参考. 1.IBM的json入门指南 json官网 2.javaweb中发送接收解析问题 3.Java解析json,以及js ...
- web系统是否要前后端分离?
开发一个web管理系统,是否要采用如今流行的前后端分离模式? 首先要从为什么会出现前后端分离说起,前后端分离的目的. 1.让前端工程师(前端)和后端工程师(后端)们能够更加专注于自己的领域 传统的开发 ...