读取10G的sql文件并写入es
业务场景
服务器内现有1500万条数据,需要将数据同步到es内
思路1
查询并批量插入es即可
优点
简单粗暴,容易理解
缺点
数据量太大,越到后面导致查询速度越慢,平均每个sql需要执行好几秒
思路2
大批量查询并保存为csv文件,然后通过easyexcel读取csv,然后批量插入
https://easyexcel.opensource.alibaba.com/
优点
运行起来的时候快速,高效
缺点
编码稍微复杂,需要先查询大量数据,保存,然后再读取,这样会生成多个很大的csv,占用大量的磁盘空间,不适用于服务器内
操作案例
实体类
先分割数据
从数据库内查询数据并写入csv
这里我设置了每次查询100万条数据,保存成为1个csv
controller
service
impl
分割完成后需要写入
controller
实体类的listener
然后调用insertByCsv1000
接口就可以了
下面是调用成功的结果,es被狂暴涌入300w次

可以再次封装,调用接口的时候接收一个路径字符串,然后通过路径读取文件,插入即可