Elastic Serch
-
什么是elasticSerch?
elasticSerch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据快速找到需要的内容。
在数据库的索引失效的情况下和海量数据查询时,使用elasticserch -
什么是elk
elk 结合kibana 。 Logstash,Beats,也就是elastic Stack(ELK)。被广泛应用在日志数据分析,实时监控等领域 -
elasticSerch的底层是Lucene
1.倒排序索引法?
文档:一条数据就是一个文档
词条(term):文档按照予以分成的词语
es的索引:相同类型的文档集合
映射:索引中文文档的字段约束信息,类似表的结构约束
先准备一个索引空间(以空间换时间)
将查询条件分词然后进行等值匹配得到的id再显示出来
2.如何在项目中使用线程池?当有一个非常大的任务,我们把这个任务拆分为多个小任务,线程池里面的线程去执行每个拆分出来的小任务。
es的集群原理
在客户端是会配置集群的ip与port,经过ip/port转发到es服务器上,接收转发的服务器是协调服务器,协调服务器也会根据ip/port转发到相应要查找数据的子服务器上。但是查的数据可能也不止在一个子服务器上,而且子服务器可能会挂掉假设子服务器es-01会挂掉,就会通过自己的shrad primary数据节点进行向其他服务器发起数据同步,将自己的的数据备份到假设为es-03的服务器上备份数据为shard replica 经过备份后es-03会向协es-01发起通知说明已备份完成,再es-01向调服务器es-02返回信息,然后协调服务器再将查询到的数据返回给客户端。
补充:
- es服务集群下的master角色:
该角色与与协调节点服务器没有任何关系,但他也可以是协调服务器。如果在集群里面有服务器挂了的话,假设还是es-01挂了,他会把上述es-03备份的es-01的replica节点数据提升为shard primary 节点。该master角色的作用与Redis集群的master的作用相似。 - 分片备份:
多台服务器备份不是自己的数据,备份的primary为replica,备份的数据要保存数据同步。
es的写入,查询。检索
写入问题:
es会先去os cache中去找要查的数据。es就能收到这个数据。 es准时的同步(几乎)只需要1s,对于左侧的os 同步数据持久化,做的是随机写入,到时候读的话就是随机读,虽然写的块但是读的慢,性能消耗极大。几乎不会丢数据。
但是如果把os cache中的数据每5min传入到translog的操作日志中去,当translog每30min或者translog写满了就会做数据数据持久化操作,触发commit 再写到磁盘里面。translog是记录操作数据的日志,日志的数据一般不会丢,但是从cache 传过来的数据可能会丢失(5min数据)
在commit之后,document文件会生成为segement file文件,持久存储在磁盘里面。segement file是用于存放真实数据的位置。
补充:
- 磁盘的顺序写于顺序读问题:
磁道(track):磁道是单个盘面上的同心圆,当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道,一个盘面上的磁道可以有成千上万个。相邻磁道之间并不是紧挨着的,这是因为磁化单元相隔太近时磁性会产生相互影响,同时也为磁头的读写带来困难。
扇区(sector):磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一个扇区,叫做引导扇区。扇区是被间隙(gap)分割的圆的片段,间隙未被磁化成0或者1。注意,扇区是读写磁盘最基本的单位,如果一个扇区因为某种原因被破坏,那么整个扇区的数据都会受影响。
读取的数据是在磁盘的扇区上
如果不是相邻扇区进行读写操作叫做随机读写,性能十分差,如果读取的数据在相邻的扇区,那么磁盘的性能较高,读写就是顺序读写。
es的删除操作
es中维护了一个.del文件,要删除的时候,客户端会直接访问这个文件,而不去管segement file 是否真的删除了,.del文件有类似于定时任务的机制,到点就删,而且segement file有一个临界条件,如果达到了这个临界条件,segement file会去执行merge操作,合成一个新的大的segement file中没有这些被删除的的记录,丢失会向.del文件查询。
es的查询与检索
- 查询原理 :可以理解为,es作为海量数据的搜索引擎,如何减轻es的访问压力,在es看来是十分重要的:
读数据时,会找到任意一台协调节点,会根据documentID进行hash运算,会算出来所有的primary和replica节点,然后就会把这些节点拿去做负载均衡,读取对于的数据,把数据返回给协调节点,然后再传到客户端。
- 检索原理:es不知道你要去搜索的东西是在primary或者replica节点,此时协调节点就会去向所有shard 发起广播,问那个shard维护的倒排序索引有对应词条的documentID,此时并不会把documentID对应的文档直接发给协调节点的服务器,而是会在内存里面进行排序分页等操作,处理完成后再根据处理好的顺序documentID到对应的shard上去拿真实数据给客户端。
es的深度分页问题