• 请不要在回答技术问题时复制粘贴 AI 生成的内容
awanganddong
V2EX  ›  程序员

es 数据同步的一个问题

  •  
  •   awanganddong · Jul 25, 2022 · 1686 views
    This topic created in 1481 days ago, the information mentioned may be changed or developed.

    功能点其实和小红书的发现功能是类似的。

    es 宽表组成的数据是 用户信息+用户发布帖子信息

    现在纠结的点在于,一个用户会有 N 多个帖子。

    如果这个用户被封禁,那么 es 宽表这个用户的所有数据都要更改。

    这个的话,我现在想到的就是异步,一个个被 es 宽表数据进行处理。

    想问下有没有更精巧的技术方案。

    6 replies    2022-07-26 10:01:21 +08:00
    F281M6Dh8DXpD1g2
        1
    F281M6Dh8DXpD1g2  
       Jul 25, 2022
    为啥不是被封禁直接返回空
    awanganddong
        2
    awanganddong  
    OP
       Jul 25, 2022
    展示的数据是以帖子为纬度的用户信息。
    然后附加用户表的筛选条件。
    LeegoYih
        3
    LeegoYih  
       Jul 25, 2022
    @awanganddong 是要在搜索结果中把被封的用户的帖子都过滤掉吗?
    awanganddong
        4
    awanganddong  
    OP
       Jul 26, 2022
    @LeegoYih 对的,现在采用的是异步的方案,慢慢去消费封禁用户的帖子
    LeegoYih
        5
    LeegoYih  
       Jul 26, 2022
    @awanganddong

    我之前也做过类似的需求,基本思路差不多,对搜索接口做了一点优化:

    1. 异步删除帖子:用户被封禁时,通过 MQ 发送一条包含用户 ID 的消息,然后消费者异步删除 es 中的 docs
    2. 搜索接口优化:搜索到结果后,可能存在某一个帖子还没来得及删,所以需要判断用户是否被封禁(可以通过查数据库、查用户缓存、bitmap 等方式)。如果用户被封禁,将该帖子数据简化,并标记为已封禁,然后返回给客户端。让客户端展示一个被封禁的文案(也可以直接过滤掉该条帖子,看具体需求)

    由于 es 的 doc 是不可变的,所以最好不要做更新处理。更新操作实际上是通过一个.del 文件将原来的 doc 标记为逻辑删除,然后再新建一个 doc 。
    awanganddong
        6
    awanganddong  
    OP
       Jul 26, 2022
    @LeegoYih 谢谢了,我学习下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   927 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:23 · PVG 06:23 · LAX 15:23 · JFK 18:23
    ♥ Do have faith in what you're doing.