突击训练第一季(二)全文检索之ES

1.es的分布式架构原理能说明一下么(es是如何实现分布式的)?

 

es设计的理念就是分布式搜索引擎,底层其实还是基于lucene的。

其核心思想就是在多台机器上启动多个es进程实例,组成一个es集群。接着你搞一个索引,这个索引可以拆分成多个shard,每个shard存储部分数据。

2.es写入数据的工作原理是什么啊?es查询数据的工作原理是什么啊?

2.1 读写数据的工作流程:

2.2 写数据的底层原理:

四个核心操作:

 操作触发条件操作过程
refresh1. 每隔1s进行一次refresh操作
2. buffer已满,则进行一次refresh操作
1. buffer将数据写入segment file
2. 清空buffer
commit1. 每隔30分钟执行一次translog
2. translog日志已满
1. 会主动进行一次refresh操作,把buffer中的数据写入到segment file
2. 生成一个 commit point 文件标识此次操作一件把buffer数据执行到了哪一个segment文件
3. 执行flush操作
flushcommit操作中1. 把file system上的文件全部强制fsync(持久化)到磁盘
2. 清空translog文件
3. 生成一个新的translog文件
merge后台检查1. 将多个segment文件合并为一个文件,并把.del文件删除
2. commit log 更新标识目前的segment
3. 打开segmentfile 到file cache 以供快速搜索
4. 删除旧的segment file

3.分布式搜索引擎在几十亿数据量级的场景下如何优化查询性能?

3.1 性能优化杀手锏--filesystem

  • es每次走fileSystem cache查询速度是最快的,所以最佳情况,机器内存至少可以容纳你总数据量的一半。
  • 采用elasticSearch + Hbase/mysql的架构方式。es中只存放少量关键数据建立索引,通过es查询到doc id 再去Hbase/mysql中查询完整的数据信息。

3.2 数据预热

数据预热是指,每隔一段时间,将热数据手动在后台查询一遍,将热数据刷新到fileSystem cache上

3.3 冷热分离

你最好是将冷数据写入一个索引中,然后热数据写入另一个索引中,这样可以确保热数据在被预热之后,尽量都让他们留在filesystem os cache里面,别让冷数据给冲刷掉。

3.4. document设计

在使用es时 避免使用复杂的查询语句(Join 、聚合),就是在建立索引时,就根据查询语句建立好对应的元数据。

3.5 分页性能优化

4.es生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?

 

申明:内容来自网络,仅供学习使用
参考:https://www.bilibili.com/video/BV1FE411y79Y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值