2026-04-230

面试总结

面试介绍总结:百度poi商业化数据清洗平台(架构级别描述)

项目描述 or 项目定位

主要负责地图 商业化POI 数据清洗,平台整体是一个多阶段的数据处理流水线。数据以文件形式在各个处理环节之间流转,每一步都会读取上一步的结果文件进行处理,并生成新的结果文件。整个流程包括数据请求、结构解析、diff判断、策略判重、人工审核以及数据上线等

做了哪些数据库相关的优化

  • 性能优化

    • 解决数据量激增需要面临的分库分表问题
      • 从mysql迁移到百度的gaiaDB,增加读写分离
        • 增加只读节点
          • 把大量查询请求从 RW(Read Write)节点分流出去,
          • 让 RW 专注于写事务和少量必须读取最新数据的查询,
          • 从而提升整个集群的吞吐能力
  • gaiaDB优势:

    • 通过数据库代理统一管理连接池、读写分离、故障切换、读写分离
    • 无需分库分表
    • 采用存储和计算分离架构,单实例最大数据量超 500TB,存储自动扩容
    • 支持列存索引,实现复杂查询性能相比MySQL提升100倍以上
    • 支持按需扩展、按需付费,综合成本降低50%
  • 索引优化

    • explain 判断是否使用索引、索引类型、扫描多少行、连接方式、是否需要排序、是否使用临时表等。
      • type 的常见值
      type含义好坏
      const主键唯一查询⭐⭐⭐⭐⭐
      eq_ref主键关联⭐⭐⭐⭐⭐
      ref普通索引⭐⭐⭐⭐
      range范围查询⭐⭐⭐
      index全索引扫描⭐⭐
      ALL全表扫描
      • key 使用了那个索引
      • extra
        • use index
        • use where
        • use tempory
        • use filesort
  • sql优化

    • 接口响应优化从23s到 300ms的实现
    • sql LIMIT offset, size查询导致的频繁扫表问题

为什么使用 Celery:

  1. 每个处理步骤都是耗时操作,Celery可以实现异步执行,避免阻塞主流程
  2. 支持多worker并发处理,提高批量数据处理效率
  3. 支持分布式扩展,随着数据量增长可以横向扩容worker就可以了
  4. 通过redis作为broke任务队列实现削峰填谷,避免系统过载
  5. 提供失败重试机制,提高任务执行的稳定性

cpu异常如何排查 golang为例,可能存在的问题

  • 存在死循环或者忙等待
  • gorontinue的数量太多
  • GC过于频繁:大量对象创建导致 GC 压力大
  • 锁竞争严重
  • 频繁的系统调用
  • Channel 阻塞 / select 空转

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!