各位老哥,请问你们的 ElasticSearch 在项目中是怎么应用的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Saurichthys
V2EX   Elasticsearch

各位老哥,请问你们的 ElasticSearch 在项目中是怎么应用的

  •  
  •   Saurichthys 2020-10-14 09:37:49 +08:00 6805 次点击
    这是一个创建于 1874 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.项目中如何处理 es 和 mysql 之间的数据同步问题? 2.把数据都丢在 es 上的方案可不可行,不存入 db 中 3.数据涉及的多表 join 查询的关系,在 es 中要怎么体现

    情况是单表,一天新增的数量大概是 30w 左右,放在 db 查询都变得挺卡的,或者有没有什么其他方案!!!

    21 条回复    2020-10-15 11:21:09 +08:00
    Hyseen
        1
    Hyseen  
       2020-10-14 09:48:59 +08:00
    使用中间件自动从 MySQL 同步到 ES 中
    ben1024
        2
    ben1024  
       2020-10-14 09:49:07 +08:00
    1.同步和异步
    利用接口和 canal
    2.可行
    3.设计结构时直接一个片关联

    30w 放 mongodb 也可以,做热切也行
    yishengyongyi
        3
    yishengyongyi  
       2020-10-14 09:51:05 +08:00
    中间件接收到数据操作记录后,同时操作 mysql 和 es,查询用 es,MySQL 、
    做备份。数据设计多表 join 不适合 es
    ArJun
        4
    ArJun  
       2020-10-14 09:58:55 +08:00
    mysql 数据放到 es 主要还是为了性能吧
    coderxy
        5
    coderxy  
       2020-10-14 10:02:08 +08:00   1
    1. 我们是写入两次,db 一次,es 一次,es 缓存一批数据批量写入
    2.不可以,千万不要拿 es 做业务,很多问题。
    3.es 最好不要做复杂的业务查询那种,尽量只用来做搜索引擎该做的事。
    Ministor
        6
    Ministor  
       2020-10-14 10:14:56 +08:00
    2l 正解,利用 canal 去发到消息,异步写入到 es/hbase 中

    es 和 hbase 作为异构数据结构,本身就是准实时场景,做到强一致性不太可能

    es 建议做一些业务展示,不做业务逻辑处理,做该的搜索的事情
    Morriaty
        7
    Morriaty  
       2020-10-14 10:18:33 +08:00
    1. 队列多写
    2. 不合适,es 不支持事务
    3. 索引时就 join 好写入 es,不要把这种事放在搜索时,es 要的就是快快快!
    dong568789
        8
    dong568789  
       2020-10-14 10:23:50 +08:00
    1 、alibaba/canal 解析 mysql-bin
    2 、数据可以存在 db 中,可做分表
    3 、数据同步到 es,尽量冗余(涉及 join 的)
    laminux29
        9
    laminux29  
       2020-10-14 10:44:50 +08:00
    ES 的核心是 [分词] 与 [提前计算 + 流式计算] 建议先把这两个核心的基本概念与原理弄清楚,不然,很多朋友盲目上了 ES 后,发现搜不到东西,或者发现某些处理步骤的性能极差,那就尴尬了。

    了解完这两个核心概念后,

    1.ES 与 Mysql 如何同步

    首先,你去谷歌里百度一下同步的具体实现方法。也就是能够搭建这套环境,并能实现通过配置、通过代码,完成它们之间的简单数据同步。

    其次,选择同步策略,比如即时同步、大批量的缓冲式同步、不影响白天生产的晚上偷偷同步策略等等,这些策略的选择与组合,要根据你们的实际情况进行。

    接着,看看性能能不能达标,不能的话,分析一下瓶颈在哪。有钱烧钱,没钱换人。

    最后,安全与备份做一下。


    2.数据能不能全丢在 ES 上,你首先得根据前文,了解 ES 那两个核心特性,再根据你们的业务,自己来做判断。举 3 个例子:

    假设你们的业务,是让药店根据固定配方词汇,在药库进行药品查询,那么这种业务可以尝试把数据全丢在 ES 上。

    但如果你们的业务,是要多维度、不同关键字、高实时性、完全匹配地对日志进行查询,那么根据 ES 的特性,你们就不能把数据全丢在 ES 上了。不然,mysql 这边数据更改后,发现 es 那边半天查不出新数据;或者就算数据同步到 es 后,根据新增关键词查不出新增数据,这种情况也不是大概不会没有可能会不发生的。


    3.30w 数据就卡了,建议你们先对 db 、系统、硬件设备,做一个性能瓶颈分析。
    xuanbg
        10
    xuanbg  
       2020-10-14 11:06:53 +08:00
    双写,ES 用队列写。
    haosamax
        11
    haosamax  
       2020-10-14 11:09:03 +08:00
    借楼,请教个问题,有没有 oracle 同步 ES 的方案
    haosamax
        12
    haosamax  
       2020-10-14 11:10:57 +08:00
    @haosamax 高峰期,oracle 单日几千万数据增量,需要查询,目前想法是同步 ES
    sadfQED2
        13
    sadfQED2  
       2020-10-14 12:45:57 +08:00 via Android
    1.代码层面双写,mysql binlog 同步
    2.可行,但是很坑,es 查询有刷片时间
    3.es 里面存成一份数据

    目前我们 es 2 亿+数据,存的是全世界的 poi 数据,用 es 主要是为了全文索引,通过关键词搜索
    goodboy95
        14
    goodboy95  
       2020-10-14 16:41:52 +08:00
    1. 我用的 logstash 设置的定期同步,即时同步还没搞,查近期数据还是走 db 。
    2. 应该可行吧,反正我 db 里的旧数据做了个备份之后就全删了。不过我这个是小规模,大规模的话不太确定。
    3. 存到 es 的时候就按照连接之后的大表去存。
    wangyzj
        15
    wangyzj  
       2020-10-14 18:27:51 +08:00
    核心还得看你查询的逻辑是什么
    复杂关系 join 放 es 也够呛
    Jackeriss
        16
    Jackeriss  
       2020-10-14 18:46:39 +08:00 via iPhone
    实时性不高的话 es 也可以定时批量写,只要记录下上次写到哪了就行,队列也可以,还可以考虑用 set,这样可以去除重复操作。
    Jackeriss
        17
    Jackeriss  
       2020-10-14 18:50:10 +08:00 via iPhone
    不能只用 es,es 和 MySQL 是互补的关系,就像 redis 和 MySQL 一样
    biubiubiuao
        18
    biubiubiuao  
       2020-10-14 18:56:37 +08:00
    kafka
    yuudachiPoi
        19
    yuudachiPoi  
       2020-10-14 19:34:31 +08:00
    通过 canal 做 mysql 和 es 之间的增量同步。
    数据放在 es 上不可行,这不是 es 该干的事情。
    尽量使用宽表同步 es,es 上不要做类似 join 的工作。
    huayumo
        20
    huayumo  
       2020-10-14 21:43:09 +08:00
    我自己的业务网站是 es 只拿来做搜索,因为都是文章这类的,比较好处理,首次上线,全量同步原有的数据,
    之后的更新也是 mysql+es 同时更新.因为只做搜索功能,需求比较简单,搜索业务也不是很重要,
    你说的涉及多表的话,业务数据不敏感的话,建议提取相关的字段直接存 es,要么提取多表关系,再进 mysql 查一遍,组合一下,只要 mysql 有索引,感觉问题不大.
    其实我水平比较水,仅供参考,不用回复,谢谢
    ofooo
        21
    ofooo  
       2020-10-15 11:21:09 +08:00
    我就单用 es 了,数据同步太麻烦也没必要。现在的业务必须有搜索功能,没有搜索就是废材。
    而且 es 数据存储上限应该和 mysql 差不多吧,应该也没什么硬伤

    不过我实际数据很少,仅供参考
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5697 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 03:09 PVG 11:09 LAX 19:09 JFK 22:09
    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