es 数据同步的一个问题

2022-07-25 11:30:18 +08:00
 awanganddong

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

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

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

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

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

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

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

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

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

由于 es 的 doc 是不可变的,所以最好不要做更新处理。更新操作实际上是通过一个.del 文件将原来的 doc 标记为逻辑删除,然后再新建一个 doc 。
awanganddong
2022-07-26 10:01:21 +08:00
@LeegoYih 谢谢了,我学习下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/868497

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX