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

请教 Es 同步问题

  •  
  •   findlisa · 44 天前 · 1078 次点击
    这是一个创建于 44 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景:菜鸡一枚,我有一个使用 es 的场景,是一个检索系统,检索的要求比较高,关系型数据库无法满足。数据源是外部的 xml 文件,数据量第一次 400w 左右,后续每天会几千的数据增量更新,增量数据也是来源 xml 文件。

    我的想法有两个:
    方式一,分两个阶段:目前是打算先将文件解析到数据库(已经实现解析到数据库,主表 400w ,关联表 1000w,400w,700w 不等),只同步关键索引字段,检索时拿到主键再通过主键查询从数据库组装数据做详情展示。通过定时任务 update_time 或者触发方式直接调用 es 的 api 将数据同步到 es
    目前存在的问题:
    1.数据不在一个表里,还需要做一些联表查询,数据处理,再同步到 es ,方便做检索,打算只做一个嵌套索引。系统会做一些更新操作也希望能同步到 es
    2.数据一致性保难保证?

    方式二,解析文件的时候,直接将数据双写,一边写 mysql ,一边组装后调 es api 写到 es
    想到可能存在的问题:
    1.如果解析过程其中一个发生异常,是不是得手动处理脏数据
    2.这种方式是不是得引入消息 mq ?先写到 mq ,再消费 mq 处理数据后写到 es (我这个数据量这样有必要吗)
    3.一次到位好像更方便,系统操作有更新还需要将更新同步到 es

    哪个方式好点呢?也稍微了解过 flink ,canal ,但是感觉好像维护困难,我也不知道能不能满足我的需求,因为我们没有专业运维,整进来也是我自己维护,我该怎么办呢,迷茫了,就怕按自己想的方式做后面一堆坑,有没有前辈指导一下
    14 条回复    2024-04-17 12:48:43 +08:00
    chenshiforever
        1
    chenshiforever  
       43 天前
    所有表都丢进 es ,查询用 es 查
    findlisa
        2
    findlisa  
    OP
       43 天前 via iPhone
    @chenshiforever 不只是单纯查询,还涉及修改呀,或者是涉及哪个字段什么时候更新了由什么更新成什么
    julyclyde
        3
    julyclyde  
       43 天前
    我觉得需要检讨一下需求和方案
    单说技术方案,可能是跟随错误的需求做出来的错误方案

    1 数据一致性当然难保证,你这都不是实时更新的
    2 双写如果发生事务回滚你咋办?
    findlisa
        4
    findlisa  
    OP
       43 天前 via iPhone
    @julyclyde 目前呢项目没有产品,我直接和需求对接的,不要求实时一致,但是要保持最终一致,数据对就行😂😂
    julyclyde
        5
    julyclyde  
       43 天前
    @findlisa 要不你试试,用 mysql slave 协议直接来读数据?
    totoro52
        6
    totoro52  
       43 天前
    canal
    totoro52
        7
    totoro52  
       43 天前
    我做过你这个需求,用的 canal ,也可以接入 mq ,保证消费
    aaaaaaaaaaj
        8
    aaaaaaaaaaj  
       43 天前
    @findlisa 我也做过类似的需求,我是先写库,然后再通过脚本,全量和增量写入 ES ,最终数据以数据库为准,数据库有插入或者更新或者删除,就在操作库成功之后再同样操作 ES 。实时性要求不高的话,就慢慢调 ES 接口往 ES 里刷就行,没有运维团队的话,额外引入的中间件越多,自己维护的越麻烦,系统写的也越复杂。
    findlisa
        9
    findlisa  
    OP
       42 天前 via iPhone
    @totoro52 也是解析 xml 名单?
    findlisa
        10
    findlisa  
    OP
       42 天前 via iPhone
    @julyclyde 好的这个考虑一下,感谢答复🙏
    findlisa
        11
    findlisa  
    OP
       42 天前 via iPhone
    canal+mq 是不是一下就多个两个东西
    findlisa
        12
    findlisa  
    OP
       42 天前 via iPhone
    @totoro52 canal+mq 是不是一下子引入了两个东西,你是先写库,然后再用 canal+mq 同步吗
    chenshiforever
        13
    chenshiforever  
       21 天前
    @findlisa 你这个需求对于 es 来讲是轻量级,数据存到数据库,然后自动同步到 es ,增删改全都会自动同步(新增数据延时几秒钟),查询全用 es 查,所有查询基本 500ms 以内。
    findlisa
        14
    findlisa  
    OP
       11 天前 via iPhone
    @totoro52 老哥能加个联系方式吗,咨询一些检索问题,可有偿
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2686 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:35 · PVG 23:35 · LAX 08:35 · JFK 11:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.