当前位置: 首页 > news >正文

Elasticsearch 全面解析

Elasticsearch 全面解析

  • 前言
  • 一、简介
    • 核心特性
    • 应用场景
  • 二、核心原理与架构设计
    • 1. 倒排索引(Inverted Index)
    • 2. 分片与副本机制(Sharding & Replication)
    • 3. 节点角色与集群管理
  • 三、核心特点
    • 1. 灵活的查询语言(Query DSL)
    • 2. 聚合分析(Aggregations)
    • 3. RESTful API 与多语言支持
    • 4. 动态与静态映射机制(Mapping)
    • 5. 分布式扩展能力(Scalability & Fault Tolerance)
  • 四、高可用与容灾策略
    • 1. 多可用区 / 多数据中心部署(Multi-AZ / Multi-DC)
    • 2. 快照与恢复(Snapshot & Restore)
    • 3. 跨集群复制(CCR: Cross-Cluster Replication)
    • 4. 节点冗余与故障检测
    • 5. 高可用设计对比
  • 五、 查询与数据分析
    • 1. 查询 DSL 解析(Domain Specific Language)
    • 2. 聚合分析(Aggregation)
    • 3. Pipeline 聚合(管道聚合)
  • 六、 安全与监控
    • 1. 安全措施(Security)
    • 2. 监控与日志(Observability)
  • 七、生产环境最佳实践
    • 1. 分片与副本规划(Shard & Replica Planning)
    • 2. 集群拓扑设计(Cluster Topology Design)
  • 八、与其他技术的对比
    • 1. Elasticsearch vs. Apache Solr
    • 2. Elasticsearch vs. MongoDB Atlas Search
    • 3. 其他竞品简要对比(补充)
    • 4. 总结选型建议
  • 九、常见问题与注意事项
    • 1. 映射(Mapping)问题
    • 2. 分片配置问题
    • 3. 性能调优
    • 4. 网络与安全
    • 5. 集群监控与报警
  • 十、总结


前言

本文旨在对 Elasticsearch 进行全面深入的解析,帮助读者了解其基本原理、架构设计、核心特点、部署方式、高可用与容灾策略、最佳实践以及常见问题与解决方案。

在这里插入图片描述


一、简介

Elasticsearch 是由 Elastic 公司于 2010 年开源发布的一款基于 Apache Lucene 构建的高性能分布式搜索与分析引擎。它为海量结构化和非结构化数据提供了强大的搜索、分析与可视化能力,是现代企业在日志监控、全文检索、数据洞察等场景中的核心技术组件之一。

核心特性

  • 🔍 近实时搜索(Near Real-Time Search)

    Elasticsearch 支持近实时的数据写入与查询,通常在文档写入后 1 秒左右即可被检索,满足对时效性要求较高的业务需求,如日志检索、异常告警等。

  • ⚙️ 分布式架构与高可用性

    天然支持分布式部署,数据会被划分为多个 分片(Shard) 并存储在集群中的不同节点上,同时每个主分片可配置多个副本,确保即使部分节点故障也能继续提供服务,实现高可用性与水平扩展。

  • 📐 灵活的数据模型

    采用 JSON 文档存储格式,支持 动态映射(Dynamic Mapping)显式映射(Explicit Mapping),兼顾灵活性与强类型控制,适应多种数据结构和业务场景。

  • 🔄 丰富的查询能力

    提供强大的查询 DSL(Domain Specific Language)语法,支持全文检索、结构化查询、聚合分析、过滤器组合等复杂搜索需求,同时具备高性能响应能力。

  • 🧰 完整的生态系统:Elastic Stack

    Elasticsearch 与数据收集工具 Beats、数据处理管道 Logstash、数据可视化平台 Kibana 无缝集成,组成完整的 Elastic Stack(也称 ELK Stack),从数据采集、传输、存储到可视化分析,构建起一站式的大数据处理与分析平台。

  • 🔒 企业级功能支持

    Elastic 提供包括权限控制、审计日志、机器学习、报警机制在内的商业特性,进一步提升了其在安全性与智能分析方面的能力(部分功能需订阅 Elastic 的商业服务)。

应用场景

Elasticsearch 的强大能力使其广泛应用于以下领域:

  • 日志采集与分析(如 ELK 日志平台)

  • 全文搜索引擎(如网站搜索、商品搜索)

  • 指标监控与可视化(如 APM 性能监控)

  • 安全分析(如 SIEM 安全信息事件管理)

  • 业务数据洞察与报表分析(如电商用户行为分析)

二、核心原理与架构设计

Elasticsearch 能够在海量数据中实现高效的搜索和分析,离不开其背后精妙的架构设计与搜索原理。以下从倒排索引、分片机制和节点角色三个核心方面进行详细解析。

1. 倒排索引(Inverted Index)

原理

倒排索引是全文检索的核心数据结构,它通过将文档中的文本内容进行分词处理,并建立“词项 → 文档 ID 列表”的映射关系,从而快速定位包含目标词项的所有文档。相比传统的正排索引(文档 → 内容),倒排索引更适合高效的关键词查找与匹配。

例如,若某个词项 “elasticsearch” 出现在文档 1、5 和 9 中,则倒排索引会记录为:

elasticsearch → [1, 5, 9]

核心技术组件

  • 分词器(Analyzer):将文本拆分为一个个词项(token)。一个 Analyzer 通常由以下部分组成:

    • Tokenizer:按一定规则(如空格、标点)切分原始文本。

    • Char Filters:在分词前对文本进行字符级的预处理(如 HTML 解码)。

    • Token Filters:对分词结果进行处理(如小写化、去停用词、词干提取等)。

  • 标准化(Normalization):对词项进行统一转换(如大小写统一、去除重音符号),提高搜索匹配的准确性。

  • 倒排表(Posting List):存储每个词项对应的文档 ID 列表,并记录其在文档中的位置信息、词频等,支持高亮、短语匹配、相关性评分等功能。

说明

倒排索引在写入阶段会消耗一定资源来构建索引结构,但在查询阶段能极大提升检索效率,是搜索性能的关键保障。

2. 分片与副本机制(Sharding & Replication)

为了实现海量数据的存储与高并发访问,Elasticsearch 采用了“分片(Shard)+ 副本(Replica)”的分布式设计:

分片类型

  • Primary Shard(主分片):每个索引会被划分为若干个主分片,每个主分片负责存储实际数据。主分片数量在索引创建时就必须确定,不可变。

  • Replica Shard(副本分片):主分片的拷贝,副本数可动态调整。副本分片不仅用于容灾恢复(主分片所在节点宕机时接管请求),也可参与查询请求,提升查询吞吐量。

分片策略设计

合理配置主分片数和副本数是集群设计中的关键决策,通常需综合考虑以下因素:

  • 数据规模增长趋势

  • 查询/写入的并发量

  • 集群节点数量与硬件资源

  • 高可用性与容错要求

例如:

  • 对于查询量大的系统,适当提高副本数可增强查询并发处理能力;

  • 对于对数据安全性要求高的系统,应至少配置 1 个副本,保障单节点故障不影响数据可用性。

3. 节点角色与集群管理

Elasticsearch 集群中的节点可承担不同的职责,通过角色配置可实现灵活的资源隔离与负载分担。

核心节点角色

  • 🧠 Master Node(主节点)

    负责整个集群的管理工作,包括索引创建、删除、节点状态监控、分片分配等元数据的维护。主节点对数据不做处理,稳定性尤为关键。通过 Zen Discovery 协议实现主节点的选举与切换,保障集群的容错能力。

  • 💾 Data Node(数据节点)

    负责索引数据的存储、分片的维护,以及实际的查询、写入、聚合计算等数据处理工作,是集群的核心计算和存储单元。

  • ⚙️ Ingest Node(预处理节点)

    用于处理文档在写入前的预处理操作,如日志解析、字段提取、格式转换等。它使用 Ingest Pipelines 实现复杂的数据清洗逻辑,避免将处理逻辑嵌入客户端或业务系统。

  • 📩 Coordinating Node(协调节点)

    类似网关,接收来自客户端的请求,将请求分发至对应的 Data 节点处理,再将结果汇总返回。所有节点默认都具备协调功能,但可通过配置实现专职协调节点,用于分摊入口流量。

集群状态与容灾机制

  • 集群启动后,会通过 Zen Discovery 或基于 Quorum(多数派)机制 来选举主节点,确保在主节点失联时自动切换,维持集群可用性。

  • Elasticsearch 采用 分片级别的复制机制 实现高可用,且支持跨节点甚至跨机房部署,进一步增强容灾能力。

三、核心特点

Elasticsearch 之所以能在搜索引擎、日志分析、实时监控等场景中广泛应用,离不开其强大且灵活的核心功能。以下从查询语言、聚合分析、API 使用、映射机制与分布式能力五个方面展开介绍:

1. 灵活的查询语言(Query DSL)

Elasticsearch 提供基于 JSON 的 **DSL(Domain Specific Language)**查询语法,支持构建结构化、层级化的复杂查询,适用于多种业务需求。

查询类型包括:

  • 布尔查询(Bool Query):组合 must、should、must_not、filter 条件,实现逻辑与/或/非的查询组合。

  • 短语查询(Match Phrase):匹配连续出现的词组,适合精确定位文本片段。

  • 模糊查询(Fuzzy Query):支持拼写容错,适用于用户搜索时可能出现的误输入。

  • 范围查询(Range Query):适用于日期、数字等范围筛选。

  • 嵌套查询(Nested Query):用于嵌套对象字段的深层次匹配。

  • 地理位置查询(Geo Query):支持地理坐标点、范围、多边形等空间位置筛选。

高亮显示(Highlighting)

支持在返回结果中对关键词命中部分进行高亮标记,增强可读性和用户体验,常用于搜索引擎、文档检索系统。

2. 聚合分析(Aggregations)

Elasticsearch 内置强大的聚合框架,用于对大规模数据进行实时统计、分析与分组。

聚合类型包括:

  • Metrics 聚合:对数值字段进行统计计算,如:

    • avg:平均值

    • sum:总和

    • min/max:最小值/最大值

    • stats:一次性获取基本统计信息

    • percentiles:分位数分析(例如 P95、P99)

  • Bucket 聚合:根据字段值将文档划分为不同桶(Buckets),支持:

    • terms:词项分组

    • histogram:固定间隔数值分组

    • date_histogram:按时间间隔分组(如日、周、月)

    • range:区间分组

  • Pipeline 聚合:基于其他聚合结果再次进行处理,例如:

    • derivative:计算增量

    • moving_avg:滑动平均

    • cumulative_sum:累计求和

    • bucket_script:自定义脚本计算派生指标

该聚合能力使 Elasticsearch 具备类 BI 工具的数据洞察能力,适用于监控、报表、仪表盘等应用。

3. RESTful API 与多语言支持

Elasticsearch 遵循 REST 架构风格,所有操作均通过标准的 HTTP 方法和 JSON 请求体完成,具备良好的跨平台兼容性和可集成性。

特点:

  • 轻量、通用:支持 GET、POST、PUT、DELETE 等方法,方便前后端、微服务系统之间直接通信。

  • 实时交互性强:便于使用工具(如 curl、Postman)进行调试与测试。

  • 多语言客户端支持:官方和社区提供丰富的客户端 SDK,包括:

    • Java(原生支持)

    • Python(elasticsearch-py)

    • JavaScript(elasticsearch-js)

    • PHP、Ruby、Go 等

这使得 Elasticsearch 能方便地集成到几乎任何主流开发语言或系统架构中。

4. 动态与静态映射机制(Mapping)

Elasticsearch 采用灵活的文档映射机制,用于定义字段类型、索引方式及分词策略等。

  • 动态映射(Dynamic Mapping)

    系统在接收到新文档时,若发现未知字段,会自动推断其数据类型并添加到映射中。适合数据结构多变或开发初期快速迭代的场景。

  • 静态映射(Explicit Mapping)

    用户可在索引创建时显式定义字段类型、分词器、是否索引等参数,具备更强的可控性,适用于对数据精度、查询性能要求较高的场景。

⚠️ 建议在生产环境中优先使用静态映射,避免动态映射误判导致字段类型不一致,引发搜索错误或性能问题。

5. 分布式扩展能力(Scalability & Fault Tolerance)

Elasticsearch 原生支持分布式部署,具备优异的横向扩展能力与容错机制。

  • 水平扩展(Horizontal Scalability)

    通过增加节点数量,可线性扩展系统的存储能力与计算能力。分片机制使得数据天然分布在多个节点上,支持 PB 级数据处理。

  • 高可用容错性(High Availability)

    • 多副本策略确保数据冗余,即使部分节点故障也能保障数据不丢失。

    • 自动分片重分配机制确保节点宕机后,系统可自动将副本提升为主分片,并重新分配到其他节点,无需人工干预。

实时监控与自恢复

配合 Kibana 和 Elastic Stack 其他组件,还可以实现集群运行状态的可视化监控、资源预警和自动恢复,大幅降低运维成本。

四、高可用与容灾策略

Elasticsearch 天然支持分布式架构,但在生产环境中仍需通过合理设计来确保高可用与故障自恢复能力。高可用不仅指“服务不中断”,也包括“数据不丢失、集群稳定、恢复迅速”。

1. 多可用区 / 多数据中心部署(Multi-AZ / Multi-DC)

设计原则

  • 主分片与副本分布在不同可用区(AZ)或数据中心(DC),最大限度降低单点故障(SPOF)影响。

  • 网络延迟和数据一致性 需权衡,建议采用低延迟专线或高速互通网络。

推荐架构

  • 至少 3 个 Master-Eligible 节点,分别部署在不同区域,避免脑裂。

  • 启用 shard allocation awareness

    cluster.routing.allocation.awareness.attributes: zone
    node.attr.zone: zone-a  # 每台节点配置不同 zone 标签
    
  • 可设置强制分片隔离策略,避免主副本落在同一机房。

适用场景

  • 跨城异地灾备。

  • 云上多可用区(如阿里云华北1/2,AWS us-east-1a/b/c)。

  • 核心业务对 RTO(恢复时间)/RPO(数据丢失容忍) 要求极高的金融、电商系统。

2. 快照与恢复(Snapshot & Restore)

快照机制

  • 支持对整个集群、指定索引或配置执行一致性快照。

  • 快照为增量式备份,只存储自上次快照以来变更的数据。

  • 可配置多个 Snapshot Repository(例如 HDFS、S3、本地路径)。

推荐操作

  • 使用 Snapshot Lifecycle Management (SLM) 实现自动化备份策略:

    PUT _slm/policy/daily-snapshot
    {"schedule": "0 30 1 * * ?",  // 每天凌晨1:30"name": "<daily-snap-{now/d}>","repository": "s3_backup","config": {"indices": ["*"],"ignore_unavailable": true},"retention": {"expire_after": "30d","min_count": 5,"max_count": 50}
    }
    
  • 快照过程不影响集群写入,适用于在线备份。

恢复场景

  • 数据被误删或损坏(逻辑故障)。

  • 整体集群灾难恢复。

  • 灾备集群恢复并接管主业务流量。

3. 跨集群复制(CCR: Cross-Cluster Replication)

原理

  • 主集群(Leader)写入数据后自动推送到从集群(Follower)。

  • 从集群仅限读取,可用于多地业务分离部署。

  • 内置“追尾机制”,即延迟追随数据变更。

CCR 示例配置

PUT /follower_index/_ccr/follow?remote_cluster=clusterA
{"leader_index": "leader_index"
}
  • remote_cluster 在集群配置中通过 seeds 定义:

    cluster.remote.clusterA.seeds: ["192.168.1.100:9300"]
    

特点与应用

  • 灾备集群可随时切换为主集群,缩短故障恢复时间(RTO)。

  • 配合 Load Balancer 实现容灾接入。

  • CCR 不适用于频繁写入的大型索引,建议仅对关键业务数据开启。

4. 节点冗余与故障检测

主节点高可用机制

  • 至少配置 3 个 master-eligible 节点,使用 discovery.seed_hostscluster.initial_master_nodes 正确引导选主。

  • 推荐使用奇数个节点,避免脑裂(split-brain)现象。

故障检测与告警

  • Elasticsearch 会周期性检查各节点心跳,节点失联后自动触发主节点选举和分片重分配。

  • 监控指标:

    • cluster_health.status(Green/Yellow/Red)

    • number_of_nodes, number_of_data_nodes

    • unassigned_shards, pending_tasks

推荐搭配使用的监控工具

  • Elastic Stack 监控组件(Metricbeat + Kibana)。

  • Prometheus + Grafana:通过 exporter 获取 JVM、节点负载、线程池等指标。

  • 报警策略:结合 Webhook、邮件、钉钉等方式发送集群状态异常告警。

5. 高可用设计对比

策略目标成本复杂度是否推荐
多可用区部署区域级故障容灾⭐⭐⭐⭐⭐
快照与恢复数据级备份与恢复⭐⭐⭐⭐
跨集群复制(CCR)跨地域容灾与分流⭐⭐⭐⭐
主节点冗余保证集群元数据可用⭐⭐⭐⭐⭐

五、 查询与数据分析

Elasticsearch 不仅是搜索引擎,更是强大的实时数据分析平台,依托于其灵活的查询 DSL 与聚合框架,支持对结构化、半结构化与非结构化数据的多维度探索与实时分析。

1. 查询 DSL 解析(Domain Specific Language)

基础查询类型

  • Match Query:全文检索,自动进行分词匹配。

  • Term Query:精确匹配,不进行分词,适用于关键词、ID、枚举等字段。

  • Bool Query:组合查询,支持 must、should、must_not、filter 条件,常用于复杂逻辑组合。

  • Range Query:支持范围过滤,常见于时间、价格、数值等字段。

查询示例(结构化 + 过滤)

GET /products/_search
{"query": {"bool": {"must": [{ "match": { "name": "wireless" } }],"filter": [{ "range": { "price": { "gte": 20, "lte": 50 } } }]}},"highlight": {"fields": {"name": {}}}
}

高亮显示

  • 通过 highlight 配置指定字段,默认使用 <em> 标签包裹高亮词条。

  • 可自定义前后缀,如 <strong>,用于前端定制化样式处理。

查询优化建议

  • 尽量使用 filter 而非 must 进行过滤:filter 不计分,缓存效果更好。

  • 使用 keyword 字段进行精确匹配(Term/Terms),避免误用 text 字段。

  • 对高频字段设置合适的分词器与索引策略(如 normalizer + lowercase)。

2. 聚合分析(Aggregation)

Elasticsearch 的聚合能力可以视作“类 SQL 的分组与统计”,适用于 OLAP 类型的分析任务。

  1. Metrics 聚合(度量统计)

用于对字段进行数值计算:

  • avg(平均值)、sum(求和)、minmax

  • value_count:计数

  • cardinality:去重计数(基于 HyperLogLog)

  • stats / extended_stats:返回多个统计指标

"aggs": {"avg_price": { "avg": { "field": "price" } }
}
  1. Bucket 聚合(分桶统计)

用于将文档按特定条件分类:

  • terms:按字段值分组(类似 SQL 的 GROUP BY)

  • histogram / date_histogram:用于时间序列分析

  • range / date_range:自定义数值或时间区间

  • filters:并行布尔条件分桶

示例:按照品牌和价格分布统计商品数量:

"aggs": {"by_brand": {"terms": { "field": "brand.keyword" },"aggs": {"price_range": {"range": {"field": "price","ranges": [{ "to": 100 },{ "from": 100, "to": 500 },{ "from": 500 }]}}}}
}

3. Pipeline 聚合(管道聚合)

用于对聚合结果进行再处理:

  • derivative:计算增量变化

  • cumulative_sum:累计值

  • bucket_script:通过脚本自定义聚合计算

  • moving_avg:滑动平均,适合用于趋势平滑处理

示例:计算每月销售金额的环比增长:

"aggs": {"monthly_sales": {"date_histogram": {"field": "sale_date","calendar_interval": "month"},"aggs": {"total_sales": { "sum": { "field": "amount" } },"sales_diff": {"derivative": { "buckets_path": "total_sales" }}}}
}

六、 安全与监控

为了保障 Elasticsearch 在企业生产环境下的可靠性与数据安全性,需要从网络隔离、身份认证、权限控制、加密通信、操作审计、指标监控与日志链路等多维度进行安全与可观察性建设。

1. 安全措施(Security)

传输加密(TLS/SSL)

  • 启用 HTTPS(HTTP 端口开启 TLS),保障客户端与节点之间的数据传输加密。

  • 启用节点间 TLS(transport 层加密),防止中间人攻击及数据泄露。

  • 推荐使用自签 CA 或 Let’s Encrypt 证书,并定期自动轮换。

身份认证与授权(RBAC)

  • 使用 X-Pack Security(7.0+ 版本已内置)开启用户认证与角色管理。

  • 支持内部用户库、LDAP、Active Directory、SAML、OIDC 等认证源。

  • 精细化控制用户权限:如只允许某角色查询指定索引、禁用写入等。

审计日志(Audit Logging)

  • 记录敏感操作(如数据导出、索引删除、登录失败);

  • 支持输出到本地日志文件、Syslog、外部 SIEM;

  • 可配置过滤器避免日志冗余。

网络隔离与访问控制

  • 建议部署在专有 VPC/VLAN 内;

  • 利用防火墙(如 iptables、AWS Security Group)限制外部访问;

  • 仅暴露 Kibana/查询网关入口,通过 API 网关做流量治理;

  • 使用 Nginx/Kong 等代理服务叠加认证和限流机制。

2. 监控与日志(Observability)

内置监控 API

Elasticsearch 提供丰富的 RESTful 接口查询各类指标:

接口说明
_cluster/health集群整体健康状态(Green/Yellow/Red)
_nodes/stats节点层面的 CPU、JVM、线程池、IO、GC 等
_cat/indices各索引文档数、大小、分片状态
_tasks当前运行的任务及其性能信息(滚动、重建等)

Metricbeat + Kibana Monitoring UI

  • 通过 Metricbeat 采集 Elasticsearch 指标,发送到自身或远端集群;

  • 结合 Kibana 的 Stack Monitoring 插件可视化展示各类节点状态、集群拓扑、慢查询等;

  • 支持自定义阈值告警(可配合 ElastAlert 或 Watcher 实现报警)。

Prometheus + Grafana

  • 使用 elasticsearch-exporter 将指标暴露为 Prometheus 格式;

  • 自定义 Grafana 仪表盘(提供 QPS、延迟、集群状态、查询速率等图表);

  • 适用于 Kubernetes + Prometheus 统一监控体系。

日志采集链路(ELK/EFK)

  • 使用 Filebeat + Logstash 构建日志采集与转发通道;

  • 支持 JSON/Regex 多种日志格式解析与字段提取;

  • 常采集日志类型:

    • Elasticsearch 启动/运行日志

    • GC 日志(JVM 性能瓶颈判断)

    • 审计日志、安全日志

    • 应用日志(Kibana、Logstash 等)

可视化告警与趋势分析

  • 结合 Kibana Alerts、Prometheus AlertManager 或 SkyWalking / Sentry 等平台实现主动告警。

  • 典型监控项包括:

    • 节点磁盘占用率 > 80%

    • Heap 使用率高、GC 时间长

    • Shard 迁移缓慢、分片过多

    • 请求延迟/失败率上升

七、生产环境最佳实践

为了保障 Elasticsearch 在实际生产环境中具备稳定性、可维护性、性能可控性与弹性扩展能力,在部署架构、性能调优、资源规划、自动化运维等方面应遵循最佳实践标准。

1. 分片与副本规划(Shard & Replica Planning)

分片数量规划

  • 建议每个分片控制在 20~50GB 数据量内,避免小分片过多带来的管理负担与内存浪费(small shard problem)。

  • 索引预估数据量 = 日均文档数 × 文档大小 × 保存周期,依据此确定索引模板与分片数。

  • 大索引场景可考虑 Index Lifecycle Management (ILM) 或冷/热索引分离方案。

示例:预估日数据 50GB,保存 7 天,可创建每日索引,每日分 2 个主分片。

副本策略建议

  • 最少配置 1 个副本,保证高可用与查询负载均衡;

  • 读多写少型业务,可设置更多副本提升并发查询能力;

  • 某些只需一次性分析的临时索引可设置副本为 0,降低存储开销。

动态调整建议

  • 利用 _shrink API 合并冷数据索引,减少旧索引分片数量;

  • 使用 _rollover 自动切换新索引,防止单索引过大;

  • 通过 index.routing.allocation 动态迁移分片至不同节点(冷热分层)。

2. 集群拓扑设计(Cluster Topology Design)

节点角色划分

节点类型功能说明
Master 节点负责集群元信息管理和主控最少 3 个 master-eligible 节点,避免脑裂
Data 节点存储索引数据,执行读写请求需高 IO 性能;可再细分为 hot/warm
Ingest 节点处理数据预处理 pipeline可缓解写入节点压力
Coordinating 节点仅做请求聚合和转发无数据,不承担计算,适合作为前端网关

硬件选型建议

资源建议配置
CPU多核高主频(>= 8 vCPU)
内存最少 32GB,Hot Data 节点建议 64GB+
存储高速 SSD,启用 noatimedeadlinenoop 调度策略
网络千兆以上,建议双网卡隔离内部数据同步与客户端访问流量

八、与其他技术的对比

在全文检索和数据分析领域,Elasticsearch 常被拿来与 Apache Solr、MongoDB Atlas Search 等搜索引擎进行对比。不同技术在架构设计、使用场景、运维复杂度、生态集成能力等方面存在差异,合理选型是系统成功的关键一步。

1. Elasticsearch vs. Apache Solr

维度ElasticsearchApache Solr
分布式架构原生支持自动分片、副本、主节点选举;无中心化依赖依赖 SolrCloud 架构实现分布式,需 Zookeeper 管理集群
安装部署支持容器化部署,官方维护 Helm chart部署灵活但配置偏繁琐(如 core/collection 管理)
查询能力强大的 JSON DSL 查询语言,语义直观,支持多种聚合分析XML/参数式查询,支持 Facet 分析,但聚合能力相对较弱
生态整合与 Logstash、Beats、Kibana 深度整合构成 ELK Stack与 Hadoop、Spark、ZooKeeper、Tika 等集成良好
实时性写入延迟低,默认近实时实时性与 Elasticsearch 接近,调优后也能满足需求
文档支持丰富的 RESTful API、活跃社区支持文档较全,社区规模略小但稳定

适用建议

  • 选择 Elasticsearch:需要强大聚合分析、快速上手部署、适配云原生环境;

  • 选择 Solr:已有大数据 Hadoop 生态或对 XML 查询有强需求的场景。

2. Elasticsearch vs. MongoDB Atlas Search

MongoDB Atlas Search 是基于 Apache Lucene 实现的 MongoDB 内嵌全文检索功能,适合对已有 MongoDB 数据进行搜索增强。相比之下,Elasticsearch 是一套专注于搜索与分析的独立引擎,具备更高的灵活性和分析能力。

维度ElasticsearchMongoDB Atlas Search
系统定位独立搜索引擎,适用于海量结构化/半结构化数据的搜索分析MongoDB 内建模块,适合原生集合的数据搜索
查询功能DSL 支持全文匹配、布尔组合、聚合分析、嵌套查询等提供基本的全文检索、Autocomplete、Fuzzy 查询等
聚合能力支持 Metrics、Bucket、Pipeline 等多层聚合聚合功能较弱,更多依赖 MongoDB 原始聚合管道
集成复杂度需同步数据或构建 ETL 管道,适合专职搜索服务内嵌无缝集成,无需外部组件,适合轻量搜索场景
性能优化可通过分片、副本、冷热分层灵活控制性能资源与 MongoDB 实例共享,扩展性受限于 MongoDB 架构
可视化工具Kibana 提供图表、仪表盘、查询界面Atlas 提供基础控制台,功能有限

适用建议

  • 使用 Elasticsearch:搜索功能复杂、需要聚合分析或非 MongoDB 数据源;

  • 使用 Atlas Search:已有 MongoDB 架构,搜索功能较轻量,无需独立部署搜索引擎。

3. 其他竞品简要对比(补充)

技术优势局限
OpenSearchElasticsearch 的开源分支,保留旧版功能,兼容性好新特性落后官方 Elastic,生态尚不成熟
Typesense / Meilisearch安装轻量,API 简洁,适合小型项目或前端集成不支持复杂聚合,不适合海量数据场景
Sphinx / Whoosh适用于嵌入式或 C++/Python 项目项目活跃度低,功能相对简化

4. 总结选型建议

应用场景推荐搜索引擎
构建复杂搜索 + 实时分析平台Elasticsearch
已有 MongoDB 数据库 + 基础搜索需求MongoDB Atlas Search
Hadoop/Spark 生态集成Apache Solr
轻量级全文搜索服务Typesense / Meilisearch
需要开源纯净版本替代 ESOpenSearch

九、常见问题与注意事项

1. 映射(Mapping)问题

  • 动态映射风险

    • Elasticsearch 默认启用动态映射功能,会在新文档写入时自动创建字段映射。

    • 问题在于字段类型可能被误判(如数字被识别为 long,实际为 text),导致后续查询或聚合失败。

    • 建议:在生产环境中使用 strict 动态设置(dynamic: strict),明确禁止未定义字段写入,提升数据结构的可控性。

  • 字段类型选择规范

    • 文本类字段:

      • text:用于全文检索(会分词),不可用于聚合或排序。

      • keyword:适用于排序、聚合和精确匹配,不分词。

    • 日期、地理位置字段建议使用标准类型如 date、geo_point,防止默认解析失败。

  • 多字段映射(multi-fields)

    • 可为同一个字段设置不同类型的子字段,如:
    "title": {"type": "text","fields": {"raw": { "type": "keyword" }}
    }
    

2. 分片配置问题

  • 分片数量不可更改

    • 索引创建后,primary shards 数量不能更改,需通过重建索引实现调整(如 _reindex API)。

    • 建议:使用 Index Lifecycle Management (ILM) 配合合理的预估数据规模设置初始分片数。

  • 合理分片策略

    • 每个分片控制在 20~50GB 较为合理。

    • 分片过多会导致集群元数据膨胀、内存消耗增大。

    • 分片过少则会影响并发查询能力和恢复速度。

  • 副本分配注意点

    • 至少设置 1 个副本,防止单点故障。

    • 查询读多写少的场景下,可以增加副本数提升读性能。

3. 性能调优

  • JVM 调优建议

    • 堆内存设置不超过物理内存 50%,最大建议 30~32GB(避免压缩指针失效)。

    • 推荐使用 G1 GC,并配置 GC 日志监控。

    • 示例配置:

      -Xms16g -Xmx16g
      -XX:+UseG1GC
      -XX:+HeapDumpOnOutOfMemoryError
      
  • 索引刷新优化

    • 默认每秒刷新(index.refresh_interval: 1s),高写入压力下建议延长(如 30s)。

    • 批量写入场景可设置为 -1 禁止自动刷新,写完后手动执行 _refresh

  • 合并与缓存调整

    • 可调 index.merge.scheduler.max_thread_count 控制段合并线程数。

    • 使用 query cachefield data cache 提升聚合查询性能。

4. 网络与安全

  • 节点通信与 TLS 加密

    • 所有节点间通信(包括 HTTP 和 transport 层)建议启用 TLS。

    • 配置示例(elasticsearch.yml):

      xpack.security.transport.ssl.enabled: true
      xpack.security.transport.ssl.verification_mode: certificate
      
  • 低延迟网络要求

    • Master 节点之间建议网络延迟 < 1ms,避免频繁主节点切换或脑裂问题。
  • 访问控制与认证授权

    • 使用基于角色的访问控制(RBAC)保护敏感数据。

    • 结合 API Key、LDAP、OIDC 等实现统一认证。

5. 集群监控与报警

  • 关键监控指标

    • 节点状态:cluster health, node stats

    • 分片状态:分片丢失、未分配、均衡情况

    • JVM 状态:堆内存使用、GC 次数与耗时

    • 磁盘使用:特别是 Data 节点所在磁盘的使用率

  • 推荐监控工具组合

    • Elastic Stack 内建监控:Kibana + Metricbeat + Filebeat

    • 第三方组合:Prometheus + Grafana(支持采集 JMX、REST API 数据)

    • 日志告警:结合 Watcher 或使用 Alertmanager 设置邮件、钉钉、Slack 等报警方式。


十、总结

Elasticsearch 以其强大的分布式架构、丰富的查询与聚合能力以及灵活的数据模型,在日志分析、业务搜索、实时监控、SIEM 等众多领域扮演着关键角色。通过本文的详细解析,从原理、架构、部署、容灾、高可用、查询与分析、安全监控,到生产实践与常见问题的解决方案,您可以获得一个全方位的视角,进而构建出稳定、可靠、高性能的搜索与分析系统。

在实际生产环境中,建议结合业务场景、数据量、访问压力等因素,采用合理的分片规划、节点角色分离、自动化部署与监控告警策略,持续优化 Elasticsearch 集群的性能与稳定性。不断关注官方文档与社区最佳实践,将帮助您应对不断变化的技术挑战并实现业务目标。

相关文章:

Elasticsearch 全面解析

Elasticsearch 全面解析 前言一、简介核心特性应用场景 二、核心原理与架构设计1. 倒排索引&#xff08;Inverted Index&#xff09;2. 分片与副本机制&#xff08;Sharding & Replication&#xff09;3. 节点角色与集群管理 三、核心特点1. 灵活的查询语言&#xff08;Que…...

SQL 中的 NULL 处理

NULL 在 SQL 中表示缺失、未知或不适用的数据值&#xff0c;它与空字符串或零值不同。SQL 对 NULL 有特殊的处理规则&#xff1a; NULL 的基本特性 比较运算&#xff1a;任何与 NULL 的比较都返回 UNKNOWN&#xff08;既不是 TRUE 也不是 FALSE&#xff09; SELECT * FROM tab…...

2025常用的ETL 产品推荐:助力企业激活数据价值

在当今数字化时代&#xff0c;企业面临着海量数据的挑战与机遇&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;工具作为数据整合与分析的关键环节&#xff0c;其重要性日益凸显。ETL 厂商众多&#xff0c;各有优势&#xff0c;本文将从多个维度进行分析&…...

深入解析:Python 爬取淘宝商品券后价

在电商领域&#xff0c;淘宝作为国内领先的电商平台&#xff0c;拥有海量的商品和丰富的优惠活动。对于技术开发者来说&#xff0c;获取淘宝商品的券后价是实现电商应用功能的重要环节。本文将详细介绍如何通过淘宝开放平台的 API 接口获取商品的券后价&#xff0c;并提供实际的…...

25.4.10学习总结

关于消除警告 警告: Loading FXML document with JavaFX API of version 23.0.1 by JavaFX runtime of version 17.0.6 对应这条警告&#xff0c;我的处理方式是&#xff0c;将IDEA的默认javaFX的库换成自己下载的javaFX的库。 我用的javaFX的库如下&#xff1a; javaFX-24…...

【XML基础-2】深入理解XML中的语义约束:DTD详解

XML&#xff08;可扩展标记语言&#xff09;作为数据交换的标准格式&#xff0c;在Web服务和应用程序间数据传递中扮演着重要角色。而确保XML文档结构正确性和语义一致性的关键&#xff0c;就在于文档类型定义&#xff08;DTD&#xff09;。本文将全面解析DTD的概念、语法结构、…...

SkyWalking + ELK 全链路监控系统整合指南

一、架构设计图 二、核心组件部署 1. SkyWalking 集群部署 yaml: # docker-compose-skywalking.yml version: 3.8services:oap:image: apache/skywalking-oap-server:9.7.0ports:- "11800:11800" # gRPC- "12800:12800" # HTTPenvironment:SW_STORAGE: …...

LeetCode hot 100—编辑距离

题目 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 示例 1&#xff1a; 输入&#xff1a;word1 "horse", word2 &q…...

SAP系统年终结算出错

问题描述&#xff1a;2024年采购订单发票校验过账到2024年时提示错误如下&#xff1a; 问题原因&#xff1a;2024年全部未结束的采购申请和订单被结转到2025年。 解决方法&#xff1a;用事务代码FMJ3冲销此采购订单结转。...

在 Dev-C++中编译运行GUI 程序介绍(二)示例:祝福程序

在 Dev-C中编译运行GUI 程序介绍&#xff08;二&#xff09;示例&#xff1a;祝福程序 前期见&#xff1a; 在 Dev-C中编译运行GUI 程序介绍&#xff08;一&#xff09;基础 https://blog.csdn.net/cnds123/article/details/147019078 示例1、祝福程序 本文中的这个祝福程序是…...

Uniapp使用onShow语法报before initialization

一、错误原因分析 函数未完成初始化时被调用 • 当你在 onShow 生命周期中调用 getUserMessagePlan() 时&#xff0c;如果该函数的定义位于调用代码的下方&#xff08;如示例中的顺序&#xff09;&#xff0c;JavaScript 引擎会因 变量提升规则 抛出此错误。 • 示例代码结构&a…...

大模型在儿童急性淋巴细胞白血病(ALL)-初治患者诊疗中应用的研究报告

目录 一、绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与内容 二、大模型技术与儿童 ALL 相关知识 2.1 大模型技术原理与特点 2.2 儿童 ALL 的病理生理与诊疗现状 三、术前风险预测与手术方案制定 3.1 术前数据收集与预处理 3.2 大模型预测术前风险 3.…...

如何选择适合机床的丝杆支撑座型号?

在机床中选择丝杆支撑座型号时&#xff0c;需综合考虑机械性能、安装条件及应用需求&#xff0c;接下来我们一起来看看详细的选型指南&#xff01; 1、‌适配性‌&#xff1a;丝杆支撑座应与所使用的滚珠丝杆完全适配&#xff0c;确保两者在尺寸、规格、性能等方面相互匹配。 2…...

「The Road to Web3 Cloud」香港活动回顾|波卡的 Web3 Cloud 愿景

在区块链基础设施的发展浪潮中&#xff0c;Polkadot 正在迈出决定性的一步&#xff1a;打造一个属于 Web3 的 “云服务平台”。如果说 Bitcoin 创造了一个计算器&#xff0c;以太坊创造了一个计算机&#xff0c;那么 Polkadot 正在做的则是构建链上的 “云服务器”。它的目标是…...

PostgreSQL-容器运行时索引修复

在 Docker 中运行的 PostgreSQL 数据库如果索引损坏&#xff0c;可以通过以下步骤进行修复。索引损坏可能会导致查询性能下降或数据不一致&#xff0c;因此需要及时处理。 1. 进入 PostgreSQL 容器 首先&#xff0c;进入运行 PostgreSQL 的 Docker 容器&#xff1a; <BASH&…...

Vanna + qwq32b 实现 text2SQL

Vanna 是一个开源的 Text-2-SQL 框架&#xff0c;主要用于通过自然语言生成 SQL 查询&#xff0c;它基于 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;技术。Vanna 的核心功能是通过训练一个模型&#xff08;基于数据库的元数据和用户提…...

100V5A同步降压大功率芯片WD5105:高效电源管理的卓越之选

100V5A同步降压大功率芯片WD5105&#xff1a;高效电源管理的卓越之选 在现代电子设备的复杂电源架构中&#xff0c;对高效、稳定且可靠的电源管理芯片需求日益增长。WD5105作为一款100V5A同步降压大功率芯片&#xff0c;凭借其出色的性能、全面的保护机制以及广泛的应用适应性…...

springboot中测试python脚本:ProcessBuilder

目录 一.添加Jython依赖 二.使用步骤 1. 创建 ProcessBuilder 实例 2. 设置工作目录&#xff08;可选&#xff09; 3. 合并错误流&#xff08;可选&#xff09; 4. 启动进程 5. 处理输入输出流 6. 等待进程完成 7.完整案例 三.注意事项 ProcessBuilder是jdk提供的脚本…...

Google Chrome下载受限制的解决方案【方法指南】

在国内使用网络时&#xff0c;部分用户在尝试访问Google Chrome官网下载谷歌浏览器时&#xff0c;常常遇到网页无法打开或文件下载失败的情况。这种下载受限制的问题多由网络访问政策或DNS解析异常导致。为了正常获取Google Chrome的最新版安装程序&#xff0c;用户需要通过一些…...

mysql-锁的算法(记录锁、间隙锁、临键锁)

1.行锁的三种算法 有3种行锁算法&#xff0c;分别是&#xff1a; Record Lock&#xff1a;单个行记录上的锁&#xff0c;没有主键&#xff0c;会使用隐式的主键进行锁定Gap Lock&#xff1a;间隙锁&#xff0c;锁定一个范围&#xff0c;但不包含记录本身Next-Key Lock&#x…...

SAP Business One系统标准功能之外的不允许负库存控制

SqlServer版本写法&#xff1a; --在存储过程SBO_SP_TransactionNotification里加上这段代码&#xff0c;记得定义一个全局变量用于接收提醒具体是哪个物料 IF transaction_type IN (A) BEGINIF EXISTS (SELECT 1 FROM OIVL T0INNER JOIN OITW T1 ON T0.ItemCode T1.ItemCode…...

AI与5G的融合:如何实现更快速、更智能的物联网应用?

引言 AI和5G的结合&#xff0c;正在加速物联网&#xff08;IoT&#xff09;应用的发展&#xff0c;让万物互联变得更加智能、高效。5G提供超高速率、低时延和海量连接的网络能力&#xff0c;而AI则赋予物联网设备更强的数据分析、预测和自动决策能力。当AI与5G融合&#xff0c;…...

Redis的哨兵

Redis的哨兵 Sentinel 一.哨兵概念1.相关名词解释图 二.主节点恢复方式1.人工恢复主节点故障流程图2.哨兵自动恢复主节点流程 三.使用docker搭建环境1.安装docker-compose2.安装docker3.停止之前的redis服务器4.使用docker获取到redis的镜像5.使用docker-compose进行容器编排创…...

初识Redis · 简单理解Redis

目录 前言&#xff1a; 分布式系统 开源节流 认识Redis 负载均衡 缓存 微服务 前言&#xff1a; 本文只是作为Redis的一篇杂谈&#xff0c;简单理解一下Redis为什么要存在&#xff0c;以及它能做到和它不能做到的事儿&#xff0c;简单提及一下它对应的优势有什么&#…...

Python设计模式-抽象工厂模式

1. 什么是抽象工厂模式 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种方式来创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们具体的类。这种模式是所有形式的工厂模式中最为抽象和最具一般性的一种。…...

【中检在线-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…...

第16届蓝桥杯单片机模拟试题Ⅲ

试题 代码 sys.h #ifndef __SYS_H__ #define __SYS_H__#include <STC15F2K60S2.H> //sys.c extern unsigned char UI; //界面标志(0湿度界面、1参数界面、2时间界面) extern unsigned char time; //时间间隔(1s~10S) extern bit ssflag; //启动/停止标志…...

软件系统安全设计方案,信息化安全建设方案(Word原件)

1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完…...

UE5 尝试接入 C# 脚本方案

最近团结替代 Unity6 的事官宣了&#xff0c;只能唏嘘不已&#xff0c;顺带的也就研究了一下在 UE5 中接入 C# 的方案&#xff0c;也算是提前帮广大 Unity 开发者蹚一下转 UE 的路~ 当前我发现的&#xff0c;维护比较勤快的 UE C# 方案有2个&#xff0c;UnrealCSharp 和 Unrea…...

力扣hot100 81-90记录

81-90&#xff08;动态规划&#xff09; leetcodehot100 81&#xff1a; class Solution { public:int climbStairs(int n) {int p 0, q 0, count 1;for(int i 1; i < n; i){p q; q count;count p q;}return count;} };//81class Solution { public:vector<vect…...

深入解析以太坊虚拟机(EVM)架构与状态机特性

以太坊&#xff08;Ethereum&#xff09;作为第二代区块链平台&#xff0c;其不仅仅是一部分布式账本&#xff0c;而是一个支持智能合约与去中心化应用&#xff08;DApps&#xff09;的全球计算机。其核心架构中&#xff0c;以太坊虚拟机&#xff08;Ethereum Virtual Machine&…...

MySQL---Ubuntu环境安装

1.首先我们要安装MySQL的安装包&#xff08;APT 配置包&#xff09; 这个是适合我的Ubuntu版本的MySQL安装包 下载安装包&#xff08;MySQL APT 配置包&#xff09; wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb2.安装 APT 配置包&#xff1a; sudo d…...

Vue 3 中 ref 与 reactive 的对比

Vue 3 中 ref 与 reactive 的对比 Vue 3 中 ref 与 reactive 的对比一、定义和基本使用refreactive 二、响应式原理refreactive 三、适用场景refreactive 四、注意事项refreactive Vue 3 中 ref 与 reactive 的对比 在 Vue 3 中&#xff0c;ref 和 reactive 都是用于创建响应式…...

【数据结构 · 初阶】- 单链表

目录 一.相关指针知识点 二.链表 1.为什么学了顺序表还要学链表 2.优点 三.实现 1.链表的打印 —— 理解链表结构 (2) 物理结构图 2.链表的尾插 —— 入门 错误写法&#xff1a;tail ! NULL 总结&#xff1a; 正确代码物理图解&#xff1a; (2) 尾插整体代码 (思考…...

【前端】【React】useCallback的作用与使用场景总结

一、useCallback 的作用与使用场景总结 useCallback 是 React 提供的一个 Hook&#xff0c;用于缓存函数的引用&#xff0c;避免因为组件重新渲染而导致函数地址发生变化。它返回一个记忆&#xff08;memoized&#xff09;后的回调函数&#xff0c;只有当依赖项发生变化时才会…...

什么是 React Router?如何使用?

React Router 详解 1. 引言 在现代 web 开发中&#xff0c;单页面应用&#xff08;SPA&#xff09;越来越流行&#xff0c;React 是构建 SPA 的热门库之一。React Router 是一个标准的路由库&#xff0c;专为 React 应用设计&#xff0c;允许开发者在应用中实现动态路由和 UR…...

jQuery 插件

在现代Web开发中&#xff0c;jQuery以其简洁的语法和强大的功能成为了前端开发者们喜爱的工具之一。为了进一步扩展jQuery的功能&#xff0c;社区贡献了大量的插件&#xff0c;使得开发者能够更加高效地实现各种复杂的交互效果和功能。本文将介绍什么是jQuery插件、如何编写自己…...

未来杭州:科技与茶香交织的生态诗篇

故事背景 故事发生在中国浙江杭州&#xff0c;融合智能科技与传统茶文化&#xff0c;描绘未来城市中人与自然共生的诗意画卷。通过六个充满未来感的生态场景&#xff0c;展现科技如何重塑龙井茶园、古运河、西湖等经典地标&#xff0c;编织出一曲科技与人文共鸣的生态交响诗。 …...

微服务多模块构建feign项目过程与一些报错(2025详细版)

目录 1.eureka-server的注意事项 2.eureka-feign的注意事项 3.多模块构建feign项目过程 3.1创建父项目 3.2创建子项目eureka-server 3.3创建子项目eureka-provider 3.4创建子项目eureka-feign 3.5运行 给个点赞谢谢 1.eureka-server的注意事项 eureka-server的yml文件…...

AWS云安全实践:基于CISA关键措施的检测与实施指南

1. 引言 随着越来越多的组织将其基础设施迁移到云端,确保AWS环境的安全变得至关重要。美国网络安全与基础设施安全局(CISA)提出的关键措施为我们提供了一个可靠的框架。本文将探讨如何在AWS环境中实施这些措施,特别关注检测类别和可实施的关键措施。 2. AWS云安全中的CISA关…...

超越肉眼所见:一种利用视网膜光学相干断层扫描血管成像(OCTA)图像进行早期痴呆检测的关联模型|文献速递-深度学习医疗AI最新文献

Title 题目 Beyond the eye: A relational model for early dementia detection using retinal OCTA images 超越肉眼所见&#xff1a;一种利用视网膜光学相干断层扫描血管成像&#xff08;OCTA&#xff09;图像进行早期痴呆检测的关联模型 01 文献速递介绍 阿尔茨海默病&…...

终端使用python出现segmentation fault (core dumped)的一种解法

有时候在终端输入python&#xff0c;希望交互式运行命令或者通过pdb调试&#xff0c;但是出现如下错误&#xff1a; [1] 7476 segmentation fault (core dumped) python 但是单独运行python xxx.py 或者 python -c "xxx" 又是可以的&#xff01; 经过与AI大模…...

分布式id生成算法(雪花算法 VS 步长id生成)

分布式ID生成方案详解:雪花算法 vs 步长ID 一、核心需求 全局唯一性:集群中绝不重复有序性:有利于数据库索引性能高可用:每秒至少生成数万ID低延迟:生成耗时<1ms二、雪花算法(Snowflake) 1. 数据结构(64位) 0 | 0000000000 0000000000 0000000000 0000000000 0 |…...

h265为什么没有大范围应用

H.265&#xff08;也称为 HEVC&#xff0c;High Efficiency Video Coding&#xff09;是一种视频压缩标准&#xff0c;旨在提供比 H.264&#xff08;AVC&#xff09;更高的压缩效率。然而&#xff0c;尽管 H.265 在技术上具有许多优势&#xff0c;但其大范围应用受到了以下几个…...

Linux图形化界面

一、Linux图形化界面 桌面对于Linux系统来说&#xff0c;只是一个应用程序&#xff0c;所以是可以移植的。 Linaro公司针对于半导体厂商推出的芯片&#xff0c;开发了ARM开发工具、Linux内核以及Linux发行版&#xff08;包括Android及Ubuntu&#xff09;。 所以无需自己移植&am…...

LangChain-检索系统 (Retrieval)

检索系统 (Retrieval) 检索系统是LangChain的核心组件之一&#xff0c;它提供了从各种数据源获取相关信息的能力&#xff0c;是构建知识增强型应用的基础。本文档详细介绍LangChain检索系统的组件、工作原理和最佳实践。 概述 检索系统解决了大型语言模型知识有限和过时的问…...

【Linux】进程概念

目录 一、进程概念 &#xff08;一&#xff09;什么是进程 &#xff08;二&#xff09;描述进程-PCB 二、fork创建进程 &#xff08;一&#xff09;bash概念 &#xff08;二&#xff09;如何创建子进程 一、进程概念 &#xff08;一&#xff09;什么是进程 结论&#x…...

【JavaScript】十七、事件委托(冒泡阶段的利用)

文章目录 1、事件委托2、tab栏切换案例&#xff1a;使用事件委托优化3、阻止元素默认行为 1、事件委托 以送快递为例&#xff0c;某班有20名同学&#xff0c;每人有一个快递&#xff0c;快递员可以一个个送&#xff0c;需要送40次&#xff0c;很繁琐&#xff0c;换个方式&…...

Android InstalldNativeService::getAppSize源码分析

InstalldNativeService::getAppSize 是 Android 系统中用于计算应用程序存储空间的核心方法&#xff0c;其逻辑可分为以下几个关键模块&#xff08;结合代码和上下文分析&#xff09;&#xff1a; 一、基础校验与初始化 ​​1. 权限校验​​ 通过 ENFORCE_UID(AID_SYSTEM) 确…...

微信小程序跳

/** * 画布文本换行绘制 * canvasContext 画布实例 * text 要写入的文本 * x 初始x轴位置 * y 初始y轴位置 * ySpacing 换行后&#xff0c;每行直接的间隔 * maxWidth 此文本写入画布的最大宽度&#xff0c;超过此宽度就换行 * color 文本颜色 * size 文本字体大小 * align 文本…...