news 2026/4/23 13:14:25

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/4/23 10:44:07

如何用这款macOS效率工具解决剪贴板管理难题?

如何用这款macOS效率工具解决剪贴板管理难题&#xff1f; 【免费下载链接】Maccy Lightweight clipboard manager for macOS 项目地址: https://gitcode.com/gh_mirrors/ma/Maccy 你是否经常遇到这些剪贴板困扰&#xff1a;复制新内容后找不到之前的文本、反复切换窗口粘…

作者头像 李华
网站建设 2026/3/10 0:35:20

如何实现高效有声资源管理:从批量下载到智能存储的完全指南

如何实现高效有声资源管理&#xff1a;从批量下载到智能存储的完全指南 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字化时…

作者头像 李华
网站建设 2026/4/23 10:50:16

零基础高效绘制网络拓扑图:这款开源工具让架构可视化如此简单

零基础高效绘制网络拓扑图&#xff1a;这款开源工具让架构可视化如此简单 【免费下载链接】easy-topo vuesvgelement-ui 快捷画出网络拓扑图 项目地址: https://gitcode.com/gh_mirrors/ea/easy-topo 网络架构可视化是IT运维和网络规划的重要环节&#xff0c;而选择一款…

作者头像 李华
网站建设 2026/4/23 10:47:59

告别格式兼容烦恼:打造你的全平台媒体库

告别格式兼容烦恼&#xff1a;打造你的全平台媒体库 【免费下载链接】m4s-converter 将bilibili缓存的m4s转成mp4(读PC端缓存目录) 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在数字媒体时代&#xff0c;格式转换已成为跨平台兼容的核心环节。无论是工…

作者头像 李华
网站建设 2026/4/23 10:45:21

如何构建个人专属音频资源库?跨平台解决方案与实践指南

如何构建个人专属音频资源库&#xff1f;跨平台解决方案与实践指南 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字内容爆炸…

作者头像 李华
网站建设 2026/4/23 10:48:25

游戏开发增强工具革新指南:120+功能模块提升开发效率

游戏开发增强工具革新指南&#xff1a;120功能模块提升开发效率 【免费下载链接】RPGMakerMV RPGツクールMV、MZで動作するプラグインです。 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerMV RPGMakerMV插件集作为一款面向RPG Maker MV和MZ引擎的游戏开发增强工…

作者头像 李华