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

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

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

    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   ·   实用小工具   ·   2575 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:41 · PVG 18:41 · LAX 02:41 · JFK 05:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.