现状,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-09-07 18:10:30 +08:00
flink cdc ? 相当于 es 就是 mysql 的从库而已 ,只是第一次全量,以后都是增量
|
2
brader 2023-09-07 18:14:05 +08:00
|
3
lcy630409 2023-09-07 18:14:21 +08:00
1000w 条?
是不是优化没做好?不至于啊 建议先优化,不行再迁移 不然迁移过去也是同样的困境 |
4
luxinfl OP @smplesugar 不太行,就没打算查 mysql 了。
|
6
hahahahahahahah 2023-09-07 21:32:03 +08:00 via iPhone
datax
|
7
smplesugar 2023-09-07 22:19:19 +08:00
@luxinfl 这个方案就是不查 mysql , 只是 mysql 类似你的业务库, 是把 mysql 的数据 同步到你的 es 的一个工具,flink cdc / datax 就是工具, 查询在你新的 es 库。
|
8
wuyiccc 2023-09-07 22:38:27 +08:00
mysql -> canal(binlog) -> mq -> es
|
9
rekulas 2023-09-07 22:43:02 +08:00
如上面所说 canal 比较适合你的工作,我们之前用 canal 可以实现毫秒级同步到第三方,确认数据没延迟之后直接切换就行了
|
10
bringyou 2023-09-07 23:27:51 +08:00
有个比较轻量的方案,就是用 elasticsearch 自带的 connector 机制: https://www.elastic.co/guide/en/enterprise-search/current/connectors-mysql.html
|
11
akira 2023-09-08 05:25:14 +08:00
1000 万条 真不多, 看下 是不是时间都消耗在查询上面了
|