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

Elasticsearch 面试备战指南

Elasticsearch 面试备战指南


一、基础概念

  1. 什么是Elasticsearch?
    Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,提供近实时搜索、高可用性和水平扩展能力。常用于日志分析(ELK)、全文检索、商业智能等场景。

  2. Elasticsearch与Lucene的关系?
    Lucene是单机搜索引擎库,Elasticsearch在Lucene基础上封装了分布式架构(如分片、副本、集群管理),使其能处理海量数据。

  3. Elasticsearch的典型应用场景?

    • 电商商品搜索(支持关键词、过滤、排序)
    • 日志分析(ELK Stack)
    • 指标监控(APM数据聚合)
    • 地理位置搜索(如附近的人)

二、核心概念

  1. 什么是索引(Index)?
    类似数据库的"表",是文档的集合(如user_index存储用户数据)。索引定义字段类型(Mapping)和分片策略。

  2. 文档(Document)和类型(Type)的区别?

    • 文档是JSON格式的最小数据单元(如一条用户记录)
    • Type在7.x后被废弃,现在一个索引只能有一个_doc类型。
  3. 分片(Shard)的作用是什么?

    • 主分片:数据水平拆分的基本单元(如5个分片将数据分成5份)
    • 副本分片:每个主分片的拷贝,提供高可用和读负载均衡。
  4. 倒排索引(Inverted Index)是什么?
    类似书籍的目录:通过关键词快速定位文档。例如:

    "学习" -> [文档1, 文档3]  
    "Elasticsearch" -> [文档2, 文档5]
    

三、数据操作

  1. 如何创建索引?

    PUT /my_index
    {
      "settings": { 
        "number_of_shards": 3,
        "number_of_replicas": 1 
      }
    }
    
  2. 写入文档的流程?

    • 客户端请求发送到协调节点
    • 根据文档ID哈希选择主分片(如shard = hash(id) % num_shards
    • 主分片写入后同步到副本分片
    • 返回响应给客户端。
  3. GET和Search的区别?

    • GET /index/_doc/1:通过ID直接检索(实时)
    • POST /index/_search:执行复杂查询(可能延迟1秒,因refresh间隔)。

四、查询与聚合

  1. Match查询和Term查询的区别?

    • match:对文本分词后搜索(如"Hello World"拆分为"hello"和"world")
    • term:精确匹配未经分词的字段(如状态字段status: "published")。
  2. 如何实现分页查询?
    使用fromsize参数:

    {
      "from": 10,
      "size": 5,
      "query": { "match_all": {} }
    }
    

    深分页问题:避免from超过10,000,改用search_after或滚动查询(Scroll)。

  3. 聚合(Aggregation)的常见类型?

    • Metric:统计指标(如avgsum
    • Bucket:分组统计(如按年龄段分组)
    • Pipeline:对聚合结果再计算。

五、集群与性能

  1. 如何确定分片数量?
    经验法则:
  • 单个分片不超过50GB
  • 考虑未来增长(分片数一旦创建不可修改)
  • 测试环境压测后调整。
  1. 什么是脑裂(Split-brain)问题?如何避免?
    多个主节点争夺控制权导致数据不一致。解决方案:
discovery.zen.minimum_master_nodes: (master_eligible_nodes / 2) + 1
  1. 如何优化写入性能?
  • 增大refresh_interval(减少段合并)
  • 使用批量API(Bulk API)
  • 禁用副本(写入完成后再启用)
  • 使用SSD硬盘。

六、实战问题

  1. 如何处理数据不一致?
    检查_seq_no_primary_term字段,使用版本控制(version_type=external)。

  2. 如何同步MySQL数据到ES?

    • 工具:Logstash JDBC、Canal(binlog同步)
    • 代码层面:双写(先写DB,再写ES)。
  3. 搜索时提示"circuit_breaking_exception"怎么办?
    内存熔断机制触发,解决方案:

    • 增加JVM堆内存
    • 优化查询(避免深度分页、大聚合)
    • 调整熔断阈值indices.breaker.fielddata.limit

七、高级特性

  1. 什么是向量搜索(Vector Search)?
    通过嵌入向量(Embedding)实现相似性搜索(如图片搜索、推荐系统),使用dense_vector字段和knn查询。

八、索引管理

  1. 如何动态更新索引的Mapping?

    • 新增字段:ES会自动推断类型并添加。
    • 修改已有字段:需新建索引并通过Reindex API迁移数据(ES不允许直接修改字段类型)。
  2. 索引别名(Alias)的作用?
    类似数据库视图,指向一个或多个索引,常用于:

    • 无缝切换索引(如logs_current指向logs_2023
    • 实现索引分区(按时间滚动)
    • 隐藏真实索引名,提升灵活性。
  3. 如何安全删除大索引?

    # 先关闭索引,减少资源占用
    POST /big_index/_close
    # 确认后删除
    DELETE /big_index
    

九、性能优化

  1. 如何避免深分页的性能问题?

    • Scroll API:适合大批量导出(快照式游标,非实时)。
    • Search After:实时分页,基于上一页最后一条的排序值。
    • 业务优化:限制最大分页深度(如只允许查看前100页)。
  2. 什么是热点线程(Hot Threads)?如何分析?
    ES节点CPU过载时,通过GET /_nodes/hot_threads查看占用资源最多的线程,常见于复杂查询或频繁GC。

  3. 字段过多导致Mapping爆炸怎么办?

    • 关闭动态Mapping("dynamic": false
    • 使用flattened类型存储JSON对象(避免嵌套字段爆炸)
    • 限制字段数量(如日志中的动态字段)。

十、集群运维

  1. 节点类型有哪些?

    • Master-eligible:参与选主,管理集群状态。
    • Data:存储数据分片。
    • Ingest:预处理文档(如Pipeline处理)。
    • Coordinating(默认):路由请求,聚合结果(不存储数据)。
  2. 如何扩展集群容量?

    • 垂直扩展:升级节点配置(CPU、内存、磁盘)。
    • 水平扩展:增加Data节点,ES会自动平衡分片。
  3. 如何备份和恢复数据?

    • 创建仓库:PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/mnt/backup" } }
    • 备份索引:PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
    • 恢复:POST /_snapshot/my_backup/snapshot_1/_restore.

十一、分词与文本处理

  1. 分词器(Analyzer)的组成?

    • Character Filter:预处理文本(如去HTML标签)。
    • Tokenizer:按规则切分文本(如standard按空格分词)。
    • Token Filter:处理分词结果(如转小写、去停用词)。
  2. 如何实现中文分词?
    安装插件:

    • IK分词器:支持词典扩展(如ik_smartik_max_word)。
    • jieba分词器:Python风格分词。
    • 配置自定义词典:config/ik/custom.dic
  3. 为什么搜索“Quick Fox”匹配不到“quick fox”?
    默认分词器会将文本转为小写,但若字段是keyword类型(不分词),需改用match查询或设置text字段。


十二、实战场景

  1. 如何设计商品搜索功能?

    • 字段类型:标题用text(分词),价格用float,分类用keyword
    • 查询组合bool查询结合must(匹配关键词)、filter(按分类/价格过滤)、should(提升品牌权重)。
    • 排序:按相关性评分、销量、价格综合排序。
  2. 如何实现自动补全(Suggest)?
    使用Completion Suggester

    PUT /products
    {
      "mappings": {
        "properties": {
          "name_suggest": { "type": "completion" }
        }
      }
    }
    

    插入数据时提供上下文(如输入前缀返回建议词)。

  3. 如何处理高并发写入场景?

    • 使用Bulk API批量写入,减少网络开销。
    • 客户端侧实现队列缓冲,合并请求。
    • 调整线程池:thread_pool.write.queue_size(避免拒绝)。

十三、故障排查

  1. 集群状态为Red/Yellow是什么意思?

    • Red:至少一个主分片不可用(数据丢失)。
    • Yellow:所有主分片正常,但副本分片未分配(通常节点不足)。
  2. 如何快速定位慢查询?

    • 启用慢日志:

      PUT /my_index/_settings
      {
        "index.search.slowlog.threshold.query.warn": "10s"
      }
      
    • 查看日志:logs/elasticsearch_index_search_slowlog.log

  3. 节点频繁GC导致性能下降怎么办?

    • 调整JVM堆内存(不超过物理内存的50%,且不超过32GB)。
    • 减少内存消耗:避免大聚合、关闭_source(按需)。
    • 升级到JDK 11+,利用G1 GC优化。

十四、高级功能

  1. 跨集群搜索(Cross-Cluster Search)如何配置?

    • elasticsearch.yml中设置集群别名:

      cluster.remote.cluster1.seeds: 192.168.1.1:9300
      
    • 查询时指定集群:GET /cluster1:index/_search.

  2. Elasticsearch SQL如何使用?

    • 执行SQL查询:

      POST /_sql?format=json
      { "query": "SELECT name FROM users WHERE age > 20" }
      
    • 转换为DSL:EXPLAIN关键字查看底层查询逻辑。


十五、安全与权限

  1. 如何启用Elasticsearch的安全功能(如认证和授权)?

    • elasticsearch.yml中开启安全配置(8.x默认开启):

      xpack.security.enabled: true
      
    • 使用内置工具设置用户密码:bin/elasticsearch-setup-passwords auto

    • 角色权限分配:通过Kibana或API定义角色(如read_onlyadmin)。

  2. 什么是基于角色的访问控制(RBAC)?
    将权限分配给角色,再将角色绑定到用户。例如:

    • 角色logs_reader:允许读取logs-*索引
    • 用户alice:分配角色logs_readermonitoring_user
  3. 如何加密集群节点间的通信?

    • 生成证书:bin/elasticsearch-certutil ca

    • 配置elasticsearch.yml

      xpack.security.transport.ssl.enabled: true
      xpack.security.transport.ssl.verification_mode: certificate
      xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
      

十六、监控与日志

  1. 如何监控Elasticsearch集群的健康状态?

    • 使用API:GET /_cluster/health(查看status、分片数、节点数)
    • Kibana监控面板:实时显示CPU、内存、磁盘、索引速率等
    • 集成Prometheus:通过elasticsearch-exporter导出指标。
  2. 常见的性能指标有哪些?如何分析?

    • 写入延迟:检查bulk队列、磁盘IO
    • 搜索延迟:优化查询复杂度、分片数
    • GC时间:JVM堆内存不足时频繁GC,需调整堆大小。
  3. 如何设置Elasticsearch的日志级别?
    修改log4j2.properties文件:

    logger.cluster.name = org.elasticsearch.cluster
    logger.cluster.level = debug
    

十七、索引生命周期管理(ILM)

  1. 什么是索引生命周期管理(ILM)?
    自动管理索引的生命周期阶段:

    • Hot:频繁写入和查询
    • Warm:只读,偶尔查询
    • Cold:归档存储,极少查询
    • Delete:删除数据。
  2. 如何配置ILM策略?

    PUT /_ilm/policy/my_policy
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": { "max_size": "50GB" }
            }
          },
          "delete": { "min_age": "30d", "actions": { "delete": {} } }
        }
      }
    }
    
  3. 如何将ILM策略绑定到索引?
    创建索引模板时指定策略:

    PUT /_index_template/logs_template
    {
      "index_patterns": ["logs-*"],
      "template": {
        "settings": {
          "index.lifecycle.name": "my_policy"
        }
      }
    }
    

十八、跨集群操作

  1. 如何实现跨集群复制(CCR)?

    • 主集群启用CCR:xpack.ccr.enabled: true

    • 创建追随者索引:

      PUT /follower_index/_ccr/follow?wait_for_active_shards=1
      { "remote_cluster": "main_cluster", "leader_index": "leader_index" }
      
  2. 跨集群搜索的延迟问题如何优化?

    • 减少网络延迟:部署集群在相近地域
    • 限制查询范围:按时间过滤数据
    • 启用缓存:缓存频繁访问的远程数据。

十九、底层原理

  1. Lucene的段(Segment)合并机制是什么?

    • 写入数据时生成不可变的小段,后台合并成更大段以提高查询效率
    • 合并过程消耗IO和CPU,可通过index.merge.scheduler.max_thread_count调整线程数。
  2. Elasticsearch如何保证近实时搜索?

    • 写入数据后,默认1秒(refresh_interval)生成新的可搜索段
    • 手动刷新:POST /index/_refresh
  3. 为什么Elasticsearch的文档更新是“标记删除+新增”?
    Lucene的段不可修改,更新操作会:

    • 标记旧文档为删除
    • 写入新文档
    • 删除标记在段合并时清理。

二十、版本升级与兼容性

  1. 如何从6.x升级到8.x?

    • 滚动升级:逐节点重启,通过/v1/rolling_upgrade API管理
    • 检查弃用日志:解决不兼容的API或Mapping
    • 重建索引:若分片策略或类型(如string改为text)变更。
  2. 7.x和8.x的主要区别是什么?

    • 默认启用安全功能(TLS、RBAC)
    • 移除Type(所有文档为_doc
    • 新增向量搜索、优化kNN查询性能
    • 简化集群配置(如discovery.seed_hosts替代旧配置)。

二十一、高级查询技巧

  1. 如何提升搜索相关性评分?

    • 使用boost参数增加关键字段权重:

      "should": [
        { "match": { "title": { "query": "手机", "boost": 2 } } },
        { "match": { "description": "手机" } }
      ]
      
    • 自定义评分脚本:基于业务逻辑调整分数。

  2. 什么是父子文档?适用场景?

    • 父文档与子文档通过join字段关联(如博客文章与评论)
    • 适用场景:需频繁查询父子关系的场景,但性能较低,建议用嵌套(Nested)或反范式化替代。
  3. Nested类型和Object类型的区别?

    • Object:字段值作为扁平结构存储,无法独立查询子字段
    • Nested:子文档作为独立隐藏文档存储,支持精确查询(如nested查询)。

二十二、实战优化案例

  1. 日志索引每天增长100GB,如何设计架构?

    • 索引按天滚动logs-2023-10-01
    • ILM策略:Hot阶段7天,Cold阶段30天后删除
    • 使用冻结索引:减少内存占用
    • 压缩存储:启用best_compression编解码。
  2. 如何实现零停机索引迁移?

    • 创建新索引并更新别名:

      POST /_aliases
      {
        "actions": [
          { "remove": { "index": "old_index", "alias": "my_alias" } },
          { "add": { "index": "new_index", "alias": "my_alias" } }
        ]
      }
      
  3. 聚合查询导致内存溢出(OOM)怎么办?

    • 分桶去重:设置size限制返回的桶数量
    • 使用composite聚合分批查询
    • 增加JVM堆内存或优化分片数量。

二十三、故障场景处理

  1. 节点宕机后如何恢复分片?

    • 新节点加入后,集群自动重新分配分片
    • 手动分配分片:POST /_cluster/reroute
    • 优先恢复主分片,副本分片从主分片复制。
  2. 发现数据写入丢失怎么办?

    • 检查写入确认策略:wait_for_active_shards=all(确保所有副本写入)
    • 启用持久化日志:index.translog.durability: request
    • 恢复未提交的数据:基于translog重放。
  3. 索引变为只读(read-only)如何处理?
    通常因磁盘空间不足触发保护机制:

    • 清理磁盘或扩容

    • 手动解除只读:

      PUT /_settings { "index.blocks.read_only_allow_delete": false }
      

二十四、扩展性与架构设计

  1. 什么是Hot-Warm架构?如何配置?

    • Hot节点:高性能硬件处理写入和频繁查询

    • Warm节点:大容量磁盘存储历史数据

    • 配置方式:通过节点属性标记角色:

      node.attr.temperature: hot
      
  2. 如何设计高可用的Elasticsearch集群?

    • 至少3个Master节点防止脑裂
    • 每个索引设置number_of_replicas ≥ 1
    • 跨机架或可用区部署节点
    • 定期快照备份。
  3. Elasticsearch是否适合作为主数据库?

    • 不推荐,因为:
      • 非事务性(无ACID)
      • 数据更新延迟(近实时)
      • 建议作为搜索和分析的辅助存储。

二十五、其他高级话题

  1. Elasticsearch中的向量搜索如何实现?
    使用dense_vector字段存储向量,通过knn查询或脚本计算相似度:

    "knn": {
      "field": "embedding",
      "query_vector": [0.1, 0.2, ...],
      "k": 10,
      "num_candidates": 100
    }
    
  2. 如何处理时区问题?

    • 存储时间戳时指定时区:

      "timestamp": "2023-10-01T12:00:00+08:00"
      
    • 查询时转换时区:

      "script": { "source": "doc['timestamp'].value.withZone(ZoneId.of('Asia/Shanghai'))" }
      
  3. Elasticsearch支持事务吗?
    不支持传统ACID事务,但可通过以下方式保证部分一致性:

    • 单文档操作是原子性的
    • 使用版本号(_version)实现乐观锁
    • Bulk API批量操作部分成功时需手动处理。

二十六、索引设计与优化

  1. 如何选择合适的数据类型(如keyword vs text)?
  • keyword:精确匹配(如ID、状态码、标签),不支持分词,适合聚合和过滤。
  • text:全文搜索(如文章内容),会被分词,支持相关性评分。
  • 特殊类型
    • date:时间类型,支持范围查询
    • geo_point:经纬度坐标
    • ip:IP地址

示例:商品索引的Mapping设计:

{
"properties": {
 "product_id": { "type": "keyword" },
 "name": { "type": "text", "analyzer": "ik_max_word" },
 "price": { "type": "float" },
 "tags": { "type": "keyword" }
}
}

二十七、查询性能优化

  1. 如何避免大查询导致OOM?
  • 分页限制:禁止from + size > 10,000,改用search_after
  • 聚合优化
    • 使用composite聚合分批查询
    • 限制size(如"terms": { "size": 100 }
  • 超时设置"timeout": "30s"
  1. 为什么查询结果不准确?如何解决?
  • 原因
    • 分片数据未刷新(refresh_interval默认1秒)
    • 分词器不一致(如查询时用standard,索引时用ik
  • 解决
    • 手动刷新:POST /index/_refresh
    • 检查分词器:GET /index/_analyze { "field": "text", "text": "样例" }
  1. 如何强制合并段(Segment Merge)?
POST /index/_forcemerge?max_num_segments=1  # 合并为1个段

注意:合并期间性能下降,建议在低峰期操作。


二十八、集群扩展与负载均衡

  1. 如何实现读写分离?
  • 写入:直接请求主分片
  • 读取:通过副本分片负载均衡(协调节点自动轮询)
  • 强制读主分片"preference": "_primary"
  1. 如何动态调整副本数量?
PUT /index/_settings
{
"index.number_of_replicas": 2  # 增加副本数提升读取吞吐量
}
  1. 节点负载不均怎么办?
  • 调整分片分配策略

    PUT /_cluster/settings
    {
      "persistent": {
        "cluster.routing.rebalance.enable": "all"
      }
    }
    
  • 手动迁移分片POST /_cluster/reroute


二十九、数据建模

  1. 如何处理一对多关系(如订单和订单项)?
  • 方案1:嵌套文档(Nested)

    {
      "order_id": "123",
      "items": [
        { "product": "手机", "quantity": 1 },
        { "product": "耳机", "quantity": 2 }
      ]
    }
    

    查询:使用nested查询:

    {
      "query": {
        "nested": {
          "path": "items",
          "query": { "match": { "items.product": "手机" } }
        }
      }
    }
    
  • 方案2:父子文档(Parent-Child):适合频繁更新子文档的场景,但性能较低。

  1. 何时应该数据反范式化?
  • 场景:多表关联查询频繁(如商品+商家信息)

  • 示例:将商家名称直接冗余到商品文档:

    {
      "product_id": "1001",
      "product_name": "手机",
      "shop_name": "官方旗舰店"  # 反范式化字段
    }
    

三十、监控与报警

  1. 如何监控集群健康状态?
  • API

    GET /_cluster/health?pretty           # 集群状态
    GET /_nodes/stats?pretty             # 节点资源使用
    GET /_cat/indices?v                  # 索引状态
    
  • KibanaStack Monitoring面板

  1. 如何设置磁盘使用率报警?
  • Kibana Alerting:创建规则,当磁盘超过85%时触发报警

  • Elasticsearch SQL

    SELECT node_name, disk_used_percent 
    FROM monitoring 
    WHERE disk_used_percent > 85
    

三十一、故障恢复

  1. 如何从快照(Snapshot)恢复部分索引?
POST /_snapshot/my_backup/snapshot_1/_restore
{
"indices": "index1,index2",  # 指定索引
"ignore_unavailable": true,
"include_global_state": false
}
  1. 节点重启后分片未分配怎么办?
  • 检查原因GET /_cluster/allocation/explain

  • 手动分配

    POST /_cluster/reroute
    {
      "commands": [
        { "allocate_stale_primary": { "index": "index1", "shard": 0, "node": "node1" } }
      ]
    }
    

三十二、高级配置

  1. 如何优化JVM堆内存?
  • 推荐值:不超过物理内存的50%,且不超过32GB(避免指针压缩失效)

  • 配置jvm.options中设置:

    -Xms16g
    -Xmx16g
    
  • 监控GCGET /_nodes/stats/jvm

  1. 如何调整线程池大小?
  • 写入线程池thread_pool.write.size(默认=CPU核心数
  • 搜索线程池thread_pool.search.size
  • 队列调整thread_pool.write.queue_size(避免任务拒绝)

三十三、安全实践

  1. 如何实现字段级别的权限控制?
  • 定义角色:限制用户只能访问特定字段

    POST /_security/role/logs_reader
    {
      "indices": [
        {
          "names": ["logs-*"],
          "privileges": ["read"],
          "field_security": { "grant": ["message", "@timestamp"] }  # 仅允许访问这两个字段
        }
      ]
    }
    
  1. 如何审计用户操作?
  • 启用审计日志:

    xpack.security.audit.enabled: true
    
  • 查看日志:<cluster_name>_audit.json


三十四、与其他系统集成

  1. 如何将Kafka数据导入Elasticsearch?
  • 方案1:Logstash

    input { kafka { topics => ["logs"] } }
    output { elasticsearch { hosts => ["es:9200"] } }
    
  • 方案2:Kafka Connect:使用Elasticsearch Sink Connector

  1. Elasticsearch和关系型数据库(如MySQL)如何配合?
  • 同步工具
    • Logstash JDBC
    • Debezium(CDC模式)
  • 双写模式:应用同时写入MySQL和ES,需处理一致性问题。

三十五、性能测试与调优

  1. 如何用esrally进行基准测试?
# 测试官方日志数据集
esrally --track=logging --target-hosts=es:9200
  • 关键指标:QPS、延迟、错误率
  1. 写入性能测试时要注意什么?
  • 禁用副本:"number_of_replicas": 0
  • 关闭刷新:"refresh_interval": "-1"
  • 批量大小:bulk_size = 5MB~15MB(根据网络调整)

三十六、未来趋势

  1. Elasticsearch与AI结合的案例?
  • 向量搜索:结合BERT模型生成文本向量
  • 异常检测ML Job自动识别日志异常模式
  • 推荐系统:用户行为向量相似度匹配
  1. Serverless Elasticsearch的发展?
  • 托管服务:AWS OpenSearch Serverless、Elastic Cloud
  • 自动扩缩容:根据负载动态调整资源

三十七、经典面试题

  1. Elasticsearch的优缺点?
  • 优点
    • 分布式横向扩展
    • 近实时搜索
    • 丰富的聚合分析
  • 缺点
    • 不支持事务
    • 深分页问题
    • 资源消耗较高
  1. 如果你来设计一个搜索引擎,会考虑哪些方面?
  • 数据建模:字段类型、分词器
  • 查询优化:缓存、分片策略
  • 高可用:副本、集群容灾
  • 扩展性:Hot-Warm架构

三十八、实际案例

  1. 如何解决“查询结果不符合预期”?
  • 步骤1:检查分词器(_analyze API)
  • 步骤2:验证查询DSL(explain=true
  • 步骤3:确认数据是否存在(GET /index/_doc/id
  1. 日志集群突然变慢,如何排查?
  • 检查队列GET /_cat/thread_pool?v
  • 查看热点线程GET /_nodes/hot_threads
  • 磁盘IOiostat -x 1

三十九、开放性问题

  1. Elasticsearch在大数据生态中的定位?
  • 搜索层:替代Solr
  • 分析层:替代部分Hadoop场景(如日志分析)
  • 实时层:与Flink/Kafka配合处理流数据
  1. 如果你负责一个日均TB级日志的系统,如何设计架构?
- **采集层**:Filebeat + Kafka  
- **处理层**:Logstash或Flink  
- **存储层**:ES集群(Hot-Warm架构 + ILM)  
- **查询层**:Caching + 异步聚合  


http://www.kler.cn/a/599653.html

相关文章:

  • Siri接入DeepSeek快捷指令
  • JAVA小项目:拼图游戏(简单易懂可上手)
  • 6.1、认证技术基础与原理
  • 基于CentOS系统搭建Samba服务
  • 【第21章】亿级电商订单系统架构-详细设计
  • 常见框架漏洞—Shiro
  • 【大模型LLM第十四篇】Agent学习之anthropic-quickstarts Agent
  • Lisp语言的学习路线
  • 使用现有三自变量和腐蚀速率数据拟合高精度模型,并进行预测和自变量贡献度分析的一般步骤
  • 聊聊langchain4j的HTTP Client
  • 力扣刷题78. 子集
  • python 中match...case 和 C switch case区别
  • 前端传来的不同类型参数,后端 SpringMVC 怎么接收?
  • 【Unity Shader编程】之透明物体渲染
  • 【VUE】day07 路由
  • FFmpeg6.1.1 MSYS2+GCC 源码编译
  • 【Java SE】单例设计模式
  • ngx_http_core_server_name
  • RocketMQ 面试备战指南
  • 在 IntelliJIDEA中实现Spring Boot多实例运行:修改配置与批量启动详解