V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luxinfl
V2EX  ›  程序员

问一个数据迁移的问题

  •  
  •   luxinfl · 233 天前 · 1219 次点击
    这是一个创建于 233 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现状,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 ,

    13 条回复    2023-09-09 16:34:45 +08:00
    smplesugar
        1
    smplesugar  
       233 天前
    flink cdc ? 相当于 es 就是 mysql 的从库而已 ,只是第一次全量,以后都是增量
    brader
        2
    brader  
       233 天前
    lcy630409
        3
    lcy630409  
       233 天前
    1000w 条?
    是不是优化没做好?不至于啊
    建议先优化,不行再迁移
    不然迁移过去也是同样的困境
    luxinfl
        4
    luxinfl  
    OP
       233 天前
    @smplesugar 不太行,就没打算查 mysql 了。
    luxinfl
        5
    luxinfl  
    OP
       233 天前
    @lcy630409 企业信息,很多需要模糊查询的,又要分页,不是太好搞
    hahahahahahahah
        6
    hahahahahahahah  
       233 天前 via iPhone
    datax
    smplesugar
        7
    smplesugar  
       233 天前
    @luxinfl 这个方案就是不查 mysql , 只是 mysql 类似你的业务库, 是把 mysql 的数据 同步到你的 es 的一个工具,flink cdc / datax 就是工具, 查询在你新的 es 库。
    wuyiccc
        8
    wuyiccc  
       233 天前
    mysql -> canal(binlog) -> mq -> es
    rekulas
        9
    rekulas  
       233 天前
    如上面所说 canal 比较适合你的工作,我们之前用 canal 可以实现毫秒级同步到第三方,确认数据没延迟之后直接切换就行了
    bringyou
        10
    bringyou  
       232 天前
    有个比较轻量的方案,就是用 elasticsearch 自带的 connector 机制: https://www.elastic.co/guide/en/enterprise-search/current/connectors-mysql.html
    akira
        11
    akira  
       232 天前
    1000 万条 真不多, 看下 是不是时间都消耗在查询上面了
    luxinfl
        12
    luxinfl  
    OP
       231 天前
    @wuyiccc
    @rekulas 我手搓代码,直接分页查询,然后写入到 es 了。。
    luxinfl
        13
    luxinfl  
    OP
       231 天前
    @bringyou 这个不太行,公司用的 7.6.2 版本
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2874 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:51 · PVG 22:51 · LAX 07:51 · JFK 10:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.