大白话八股文-ElasticSearch

ElasticSearch核心原理与实践

一.Es的组成部分

  1. index 索引: 索引类似于mysql 中的数据库,Elasticesearch 中的索引是存在数据的地方,包含了一堆有相似结构的文档数据。
  2. type 类型: 类型是用来定义数据结构,可以认为是 mysql 中的一张表,type 是 index 中的一个逻辑数据分类(在7.0版本中去除)。
  3. document 文档: 类似于 MySQL 中的一行,不同之处在于 ES 中的每个文档可以有不同的字段,但是对于通用字段应该具有相同的数据类型,文档是es中的最小数据单元,可以认为一个文档就是一条记录。
  4. field 字段: field是Elasticsearch的最小单位,一个document里面有多个field。
  5. shard 分片: 单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。
  6. replica 副本: 任何一个服务器随时可能故障或宕机,此时 shard 可能会丢失,因此可以为每个 shard 创建多个 replica 副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每个索引10个 shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。

二、概念介绍

1)segment : 众所周知,Elasticsearch 存储的基本单元是 shard , ES 中一个 Index 可能分为多个 shard , 事实上每个 shard 都是一个 Lucence 的 Index ,并且每个 Lucence Index 由多个 Segment 组成, 每个 Segment 事实上是一些倒排索引的集合, 每次创建一个新的 Document , 都会归属于一个新的 Segment , 而不会去修改原来的 Segment ; 且每次的文档删除操作,会仅仅标记 Segment 中该文档为删除状态, 而不会真正的立马物理删除, 所以说 ES 的 index 可以理解为一个抽象的概念。es 每秒都会生成一个 segment 文件,当文件过多时 es 会自动进行 segment merge(合并文件),合并时会同时将已经标注删除的文档物理删除;

2)translog: translog 提供所有还没有被刷到磁盘的操作的一个持久化纪录。当 Elasticsearch 启动的时候, 它会从磁盘中使用最后一个提交点去恢复已知的段,并且会重放 translog 中所有在最后一次提交后发生的变更操作。为了防止 elasticsearch 宕机造成数据丢失保证可靠存储,es 会将每次的操作同时写到 translog 日志中。新文档被索引意味着文档会被首先写入内存 buffer ,操作会被写入 translog 文件。每个 shard 都对应一个 translog 文件;translog 会每隔 5 秒异步执行或者在每一个请求完成之后执行一次 fsync 操作,将 translog 从缓存刷入磁盘,这个操作比较耗时,如果对数据一致性要求不是跟高时建议将索引改为 async ,如果节点宕机时会有 5 秒数据丢失;
3)refresh:写入和打开一个新 segment 的轻量的过程,es 接收数据请求时先存入内存中,默认每隔一秒会从内存 buffer 中将数据写入 filesystem cache 中的一个 segment,内存 buffer 被清空,这个时候索引变成了可被搜索的,这个过程叫做 refresh;

4) flush:es 默认每隔 30 分钟或者操作数据量达到 512mb ,会将内存 buffer 的数据全都写入新的 segment 中,内存 buffer 被清空,一个 commit point 被写入磁盘,并将 filesystem cache 中的数据通过 fsync 刷入磁盘,同时清空 translog 日志文件,这个过程叫做 flush;
5) fsync:fsync 是一个 Unix 系统调用函数, 用来将内存 buffer 中的数据存储到文件系统. 这里作了优化, 是指将 filesystem cache 中的所有 segment 刷新到磁盘的操作;

6) commit:为了数据安全, 每次的索引变更都最好要立刻刷盘, 所以 Commit 操作意味着将 Segment 合并,并写入磁盘。保证内存数据尽量不丢。刷盘是很重的 IO 操作, 所以为了机器性能和近实时搜索, 并不会刷盘那么及时。

7) commit point: 记录当前所有可用的 segment ,每个 commit point 都会维护一个 .del 文件( es 删除数据本质是不属于物理删除),当 es 做删改操作时首先会在 .del 文件中声明某个 document 已经被删除,文件内记录了在某个 segment 内某个文档已经被删除,当查询请求过来时在 segment 中被删除的文件是能够查出来的,但是当返回结果时会根据 commit point 维护的那个 .del 文件把已经删除的文档过滤掉;

三.倒排索引

倒排索引的特点是根据匹配到的分词映射到文档id,而非传统的由id映射到具体的数据

在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。例如,某个文档经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。那么,倒排索引就是 关键词到文档 ID 的映射,每个关键词都对应着一系列

### MQ-2烟雾传感器的工作原理通俗解释 MQ-2烟雾传感器是一种基于气敏电阻的气体检测设备,其核心是通过检测特定气体对传感器阻值的影响来判断气体浓度。以下是对该传感器工作原理的详细说明: #### 1. 基本结构与材料 MQ-2烟雾传感器的核心部件是一个气敏电阻,通常由氧化锡(SnO₂)等半导体材料制成。在正常空气中,这种材料具有较高的电阻值。当接触到可燃气体或烟雾时,其电阻值会发生变化[^1]。 #### 2. 工作机制 传感器的工作机制基于气体吸附和脱附过程: - 在加热元件的作用下,传感器表面温度升高,使得气敏材料能够更有效地吸附气体分子。 - 当气体分子(如一氧化碳、甲烷、液化气等)接触到气敏材料时,会发生化学反应,改变材料的导电性能。 - 对于还原性气体(如CO、CH₄等),它们会在气敏材料表面发生氧化反应,从而降低材料的电阻值。 - 反之,在气体浓度下降时,气敏材料表面的气体分子逐渐脱附,电阻值恢复到初始状态。 #### 3. 信号输出 MQ-2传感器提供两种类型的输出: - **模拟输出**:通过内置的分压电路,将气敏电阻的变化转化为电压信号,供外部设备(如MCU的ADC模块)采集。需要注意的是,直接从ADC读取的数值并不直接等于气体浓度,而是需要经过校准和计算才能得到实际浓度[^1]。 - **数字输出**:部分型号的MQ-2传感器带有比较器电路,当气体浓度超过预设阈值时,会输出一个高低电平信号。 #### 4. 校准与计算 为了准确测量气体浓度,需要对传感器进行校准: - 使用标准气体(如一定浓度的一氧化碳)标定传感器的灵敏度。 - 根据厂商提供的公式或实验数据,建立电压与气体浓度之间的关系曲线。 - 在实际应用中,通过采集ADC值并代入校准公式,可以计算出气体浓度。 ```python # 示例代码:计算气体浓度 def calculate_gas_concentration(voltage, sensitivity): # 根据传感器手册中的校准公式计算浓度 concentration = (voltage / sensitivity) * 1000 # 示例公式 return concentration ``` #### 5. 注意事项 - MQ-2传感器的响应速度较慢,通常需要几分钟才能达到稳定状态。 - 加热元件的功耗较高,需确保电源能够稳定供电。 - 环境因素(如温度、湿度)可能影响传感器的准确性,因此需要进行补偿处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值