
现状,mysql 存了大概 1000 万条企业的数据,由于查询条件很多,所以就打算把数据迁移到 es 里面。 用了 logstash ,每次都是全量同步。
所以有几个问题: 1.全量同步,磁盘空间要 double 才能存的下,因为要确保数据导进来才能把原有的删除掉 2.很慢,据说 4 个小时,看了查询语句,是直接 limit m offset n
所以想问下,有啥改进方法麽。能不能做到直接覆盖更新。 附上 logstash 配置
input { jdbc { jdbc_connection_string => "jdbc:xxx" jdbc_user => "xxx" jdbc_password => "xxx" jdbc_driver_library => "mysql-connector-java-8.0.24.jar" jdbc_driver_class => "xxx" jdbc_paging_enabled => "true" jdbc_page_size => "50000" lowercase_column_names => "false" statement_filepath => "xxx" # schedule => "* * * * *" type => "type1" } } output { if[type] == "type1" { elasticsearch { hosts => ["localhost:9200"] index => "t_jrb_corp_df_ce" document_id => "%{regNo}" doc_as_upsert => true } } } sql 就是 select * from table 。
或者又没有其他方式,可以快速的从 mysql 导出数据到 es ,
1 smplesugar 2023 年 9 月 7 日 flink cdc ? 相当于 es 就是 mysql 的从库而已 ,只是第一次全量,以后都是增量 |
2 brader 2023 年 9 月 7 日 |
3 lcy630409 2023 年 9 月 7 日 1000w 条? 是不是优化没做好?不至于啊 建议先优化,不行再迁移 不然迁移过去也是同样的困境 |
4 luxinfl OP @smplesugar 不太行,就没打算查 mysql 了。 |
6 hahahahahahahah &nsp; 2023 年 9 月 7 日 via iPhone datax |
7 smplesugar 2023 年 9 月 7 日 @luxinfl 这个方案就是不查 mysql , 只是 mysql 类似你的业务库, 是把 mysql 的数据 同步到你的 es 的一个工具,flink cdc / datax 就是工具, 查询在你新的 es 库。 |
8 wuyiccc 2023 年 9 月 7 日 mysql -> canal(binlog) -> mq -> es |
9 rekulas 2023 年 9 月 7 日 如上面所说 canal 比较适合你的工作,我们之前用 canal 可以实现毫秒级同步到第三方,确认数据没延迟之后直接切换就行了 |
10 bringyou 2023 年 9 月 7 日 有个比较轻量的方案,就是用 elasticsearch 自带的 connector 机制: https://www.elastic.co/guide/en/enterprise-search/current/connectors-mysql.html |
11 akira 2023 年 9 月 8 日 1000 万条 真不多, 看下 是不是时间都消耗在查询上面了 |