database - 使用扇出写入方法根据隐私设置(PostgreSQL、Redis)更新 Feed
问题描述
我正在为社交网络规划一个系统设计,在用户(如 Instagram)和他们可以发布的帖子之间建立“关注”关系。
如果用户 A 关注用户 B,则用户 A 可以在其时间轴上看到 B 的所有内容,而不管 B 是否也关注 A。但是,如果 B 决定将其隐私设置设置为 Private,则用户 A 应该无法看到不再是用户 B 的内容。
我想对用户 Feeds/Timelines 使用扇出写入方法(推送方法),即:在 Redis 中存储他们关注的所有人的最新帖子。因此,当用户 A、B 和 C 都关注用户 D,并且用户 D 发布新帖子时,我会更新用户 A、B 和 C 的提要列表。这有助于在 O(1) 中为每个用户获取提要,这很好。
但是,如果用户 D 将他的隐私设置设置为“私人”,并且他只关注用户 B。这意味着现在应该只有用户 B 可以看到他的内容。所以我需要从redis的用户A和C的列表中删除用户D的内容。
但是这样是不是太不靠谱了?如果我们有很多用户和很多追随者,我们能否得到一个边缘案例,在 Redis 完成更新他们的提要列表之前,用户仍然可以看到他们在一段时间内不应该看到的内容?
此外,这意味着如果用户相互关注或只有一个用户关注另一个,我也应该将信息存储在 redis 中。
它是如何在“现实世界”(twitter、facebook、instagram ....)中实现的,我错过了什么吗?
解决方案
推荐阅读
- java - 从corda Flow返回HashMap到SpringBoot抛出:com.esotericsoftware.kryo.KryoException
- automation - 使用 Automation Anywhere 自动化 SAP 的问题
- reactjs - REACT NATIVE - 关闭导入模式时更改屏幕状态
- html - flex内的内联元素
- asp.net-core - 我正在研究 asp 核心并对我的一些属性应用验证。但它不能正常工作
- reactjs - 失焦时使用 allowNew=false 的 TypeAhead 会留下输入文本
- microsoft-graph-api - Microsoft Graph 如何使用 odata 通过 emailAddresses 搜索联系人?
- php - 使用 $wpdb->insert 将错误的数据插入数据库
- selenium - Selenium:记录测试步骤 + 范围报告中的异常
- docker - Windows容器读取tcp中的docker错误:wsarecv:现有连接被远程主机强行关闭