关于 Elasticsearch 的使用场景问题求指教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiobanma
V2EX    问与答

关于 Elasticsearch 的使用场景问题求指教

  •  
  •   jiobanma 2023-02-20 17:48:54 +08:00 1737 次点击
    这是一个创建于 1033 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:项目重构,有些负责查询想要上 ES 。之前没有使用 ES 的项目经验,网上简单的学习了一下 es 的搭建和一些 api 的调用。 但是找到的学习资料实战部分大多都是单表的数据,也都是偏简单的一些需求。所以对 es 在实际项目中的使用方式有些疑惑点,希望大佬们可以指点一二。

    问题 1

    如果所涉及到的查询业务只有单表,为了减少业务代码的开发。目前了解到的中间件是 canal ,监听 binlog ,将数据同步到 ES 中。 想问下大家,实际使用中也是这种思路吗。

    问题 2

    如果涉及到多表关联查询,是不是只能通过业务代码往 ES 里面灌数据。 举个实际的场景: 比如:学生表 student 中有 id ,code ,name ,age ,address ,schoolname ,tel ... 等字段 年级表 class 中有 id ,name ...等字段 还有其他的一些基础数据表。

    现在想实现一个学员列表的需求。 列表中,会以学生为维度,展示其他很多表中涉及到的字段。 搜索条件有:学员姓名,学员编码( code ),学校,入学时间等字段。

    如果基于 mysql 实现,可能需要多张业务表关联查询,甚至有些字段可能一个 sql 查不出来,需要在查询出来的结果中遍历,单独再去查询某个字段,然后赋值。这样的话,表数据比较多查询效率很慢。

    如果基于 ES 来实现,我的思路是:

    1. 写一个跑批接口,现将筛选条件需要的字段跟学生建立联系查询出来,组织成一条数据存入到 es 中,比如:学员 id ,姓名,编码,学校等。这样就可以将历史数据同步到 es 中了。
    2. 在新增修改删除基础表数据的地方,同步去修改 es 中的数据。
    3. 查询列表的时候,先去查 es 中的数据,再根据一个唯一值(比如学员 id ),然后根据唯一键查询 mysql 补足其他字段的值。

    总结:查询字段放 es ,表格字段查 mysql

    我不知道我的实现思路是否使用合理和正确。如果合理的话,感觉代码的侵入性太强了。比如上述问题二,如果修改了某个基础标的数据,我还要对应的修改 es 中的数据。可能系统里我都不知道都有哪些地方修改基础数据。

    希望大家可以提供一些实际工作中应对以上场景时的解决思路。如果有一些参考的教程资料关于 es 的也可以提供。 感谢大家

    8 条回复    2023-05-18 18:01:18 +08:00
    brightzhuhl
        1
    brightzhuhl  
       2023-02-20 18:15:34 +08:00
    单表一般不需要 ES 的,数据库做好索引就 ok

    多表聚合的情况,肯定是需要单独的代码逻辑来查询数据库数据构建为 es 索引的。但是可以通过 mq 解耦。

    目前我们这里使用 canal 还会定义一个通用的 mq 转发层,业务只需要定义好监听字段的规则,转发层会将 binlog 消息投递到对应的 mq 队列,应用代码监听队列之后再触发一个重新构建 es 的 mq 消息
    TWorldIsNButThis
        2
    TWorldIsNButThis  
       2023-02-20 18:32:27 +08:00 via iPhone
    @brightzhuhl
    我一直觉得 es 是用来应付对宽表各种字段 xjb 查的

    这种场景下 mysql 索引根本建不过来
    RedBeanIce
        3
    RedBeanIce  
       2023-02-20 18:45:19 +08:00 via iPhone
    你是对的,至于代码里面的对象转 es ,可以发送 kafka 到 lodash ?或者什么的地方,可以直接塞到 es 里面去。
    bugsnail
        4
    bugsnail  
       2023-02-20 18:50:30 +08:00
    差不多是这样,像 1 楼说的,单表不需要上 ES

    除非几百万数据单字段 like 模糊搜索
    jiobanma
        5
    jiobanma  
    OP
       2023-02-21 09:17:45 +08:00
    @brightzhuhl 您说的这个思路是不是这样的,多表聚合的时候,canal 监听 binlog ,发现数据变化,将 binlog 转发到 mq 中,然后业务代码监听 mq ,接收到消息编写对应的业务代码来维护 es 中的数据
    jiobanma
        6
    jiobanma  
    OP
       2023-02-21 09:19:56 +08:00
    @RedBeanIce lodash 是什么意思呀?
    jiobanma
        7
    jiobanma  
    OP
       2023-02-21 09:20:17 +08:00
    @bugsnail 谢谢大佬
    gofocus
        8
    gofocus  
       2023-05-18 18:01:18 +08:00
    upup
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2217 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:27 PVG 08:27 LAX 16:27 JFK 19:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86