news 2026/5/1 10:25:59

SpringBoot 数据库同步 Elasticsearch 性能优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot 数据库同步 Elasticsearch 性能优化

文章目录

  • 前言
  • 一、原始实现
  • 二、总觉得哪里不对劲?
  • 三、 意想不到的收获
  • 总结

前言

系统引入 Elasticsearch 来支持更高效的查询场景 (以下简称 ES). 就需要将数据库数据同步到 ES 中. 方案选择是分批从 DB 中读取数据再分批写入ES 中.


一、原始实现

读取:for(inti=0;i<times;i++){List<Order>saleList=salesDataGateway.batchList(query);writeEsKit.doWrite(saleList);query.setStartIndex(maxid+1);}publicclassOrderimplementsSerializable{@JsonProperty("geo_cd")privateStringgeoCd;@JsonProperty("fiscal_year")privateStringfiscalYear;}写入ES:BulkRequestbulk=newBulkRequest();bulk.timeout(timeOut);for(Orderitem:saleList){bulk.add(newIndexRequest(indexName).id(item.getOrderId()).source(JsonUtil.object2Json(item),XContentType.JSON));}Client.bulk(bulk);
这段代码平稳运行了一年多,一张 index 最多要写入500多万数据,耗时约2小时.因为一条订单260多个字段,所以大家也都觉得就得这么长时间.汇报得时候也理直气壮.

二、总觉得哪里不对劲?

总觉得这里怪怪的.代码逻辑先从数据库查出数据.又使用 @JsonProperty 来命名转换.最后格式化为 JSON 写入.而格式化这个操作在处理大实体类时是有性能损耗的.所以我想是不是可以有别的方式.比如去掉中间商赚差价....
for(inti=0;i<times;i++){List<HashMap<String,Object>>saleList=salesDataGateway.batchListMap(query);writeEsKit.doWrite(saleList);query.setStartIndex(maxid+1);}BulkRequestbulk=newBulkRequest();bulk.timeout(timeOut);for(HashMap<String,Object>item:saleList){bulk.add(newIndexRequest(indexName).id(item.getOrderId()).source(item));}

三、 意想不到的收获

ES 支持Map 写入.所以拿的就是Map,写入同样是Map.不兜圈子直接搞.写入耗时从2小时直接缩短到29分钟.觉得它耗时?没想到它这么耗时!!

总结

为领导跟老板汇报提供了素材.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 9:27:36

CarPlay 增强 Siri 功能与普通 Siri 的技术差异与实现解析

CarPlay 增强 Siri 功能与普通 Siri 的技术差异与实现解析 面向对象&#xff1a;已有两年以上 iOS 经验、准备给车机做语音助手的同学 阅读收益&#xff1a;搞清 CarPlay Siri 到底「增强」在哪&#xff0c;拿到可落地的 Swift 代码与踩坑清单 1. 车载语音的“三座大山” 在车…

作者头像 李华
网站建设 2026/4/24 9:20:44

大模型智能客服实战:从零到一搭建系统的架构设计与避坑指南

背景痛点&#xff1a;传统客服的“三板斧”为啥不灵了 做客服系统的老同学都踩过这些坑&#xff1a; 关键词规则写到最后成“蜘蛛网”&#xff0c;用户一句“我密码好像不对&#xff0c;但好像又对了”直接原地爆炸。多轮对话靠 if-else 硬写&#xff0c;用户中途插一句“等等…

作者头像 李华
网站建设 2026/5/1 7:16:59

MYSQL8.0安装报错

Log报错&#xff1a;mysqld: File .\澶忛槼鏄?bin.index not found (OS errno 2 - No such file or directory) The designated data directoryAttempting to add a Windows Firewall rule with command: netsh.exe advfirewall firewall add rule name"Port 3306" …

作者头像 李华
网站建设 2026/5/1 7:24:17

分子对接从入门到精通:AutoDock Vina完整实战指南

分子对接从入门到精通&#xff1a;AutoDock Vina完整实战指南 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina 分子对接是药物研发和计算化学领域的核心技术&#xff0c;而AutoDock Vina作为最受欢迎的开源分…

作者头像 李华
网站建设 2026/5/1 7:24:25

告别B站字幕烦恼:3种方案对比+超实用提取指南

告别B站字幕烦恼&#xff1a;3种方案对比超实用提取指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 为什么B站字幕提取总是让人头疼&#xff1f; 你是否也曾…

作者头像 李华
网站建设 2026/5/1 7:23:37

三步法聊天记录管理:本地备份与数据导出实用指南

三步法聊天记录管理&#xff1a;本地备份与数据导出实用指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …

作者头像 李华