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


es设计的理念就是分布式搜索引擎,底层其实还是基于lucene的。
其核心思想就是在多台机器上启动多个es进程实例,组成一个es集群。接着你搞一个索引,这个索引可以拆分成多个shard,每个shard存储部分数据。



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


2.1 读写数据的工作流程:


2.2 写数据的底层原理:





四个核心操作:
| 操作触发条件 | 操作过程 | |
|---|---|---|
| refresh | 1. 每隔1s进行一次refresh操作 2. buffer已满,则进行一次refresh操作 | 1. buffer将数据写入segment file 2. 清空buffer |
| commit | 1. 每隔30分钟执行一次translog 2. translog日志已满 | 1. 会主动进行一次refresh操作,把buffer中的数据写入到segment file 2. 生成一个 commit point 文件标识此次操作一件把buffer数据执行到了哪一个segment文件 3. 执行flush操作 |
| flush | commit操作中 | 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
本文深入解析了Elasticsearch的分布式架构原理,包括其如何通过多节点形成集群、索引分片来处理大规模数据。同时,详细介绍了ES的读写数据流程及底层机制,如refresh、commit、flush和merge等操作。此外,针对数十亿数据量级的场景,提出了多种性能优化策略,如利用filesystem cache、数据预热、冷热分离、document设计和分页优化。
786

被折叠的 条评论
为什么被折叠?



