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

es 数据同步的一个问题

  •  
  •   awanganddong · 2022-07-25 11:30:18 +08:00 · 1271 次点击
    这是一个创建于 851 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    由于 es 的 doc 是不可变的,所以最好不要做更新处理。更新操作实际上是通过一个.del 文件将原来的 doc 标记为逻辑删除,然后再新建一个 doc 。
    awanganddong
        6
    awanganddong  
    OP
       2022-07-26 10:01:21 +08:00
    @LeegoYih 谢谢了,我学习下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2205 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:56 · PVG 08:56 · LAX 16:56 · JFK 19:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.