关于类微博的timeline的设计思考

获取某条新浪微博的所有转发用户列表(使用repost_timeline接口) 在使用新浪微博的API做项目时,需要获取转发了某条特定微博的所有用户的列表。决定采用statuses/repost_timeline得到转发列表,然而发现两个问题: 1:新浪微博对这个接口有限制,只能返回最新的2000条数据。一旦获取的数量即将超过2000条,发出去的请求都会返回如“代码1”所示的错误提示。 2:即使我想妥协,只用2000条数据,使用新浪微博提供的官方javaSDK相对应的测试 阅读详情

公司要开发一个类webio的系统,一个很基本的功能就是timeline。用户在自己的主页可以看到其观注的所有用户发表的信息列表;而其它用户可以一个用户的个人主页看到这个人发布的信息列表。

这时候最主要要考虑的就是采用推模式,还是拉模式。

一、推模式,以空间换时间;一个用户发布一条新信息之后,把这条信息追加到所有的粉丝的页面信息流里;这样当一个用户登录之后,通过一条fetch命令,就可以看他关注的所有人发布的信息了。但是这样一来,所带来的各种问题接踵而至:

1. 新关注一个用户时,需要把被关注的用户的所有历史数据都放到粉丝的数据流存贮里,在长时间后这是一个非常长的操作;

2. 取消关注一个用户时,需要把被取消关注的用户从原粉丝的数据流存贮里全部删除掉,这是一个O(N)的操作,而这个N的增加会很大;

3. 当一个用户删除一个已经分享的时候,需要将他的所有的粉丝的数据流里的这条记录都删除;

4. 一个用户的粉丝数是不受限制的,所以如果一个人的粉丝数过多的时候比如有1W个粉丝,那么发一条新消息,就要分解成1W次处理逻辑,工作量十分庞大。

 

所以就目前来看,不应该使用推模式,推模式带来的“坑”太多;

二、拉模式,空间消耗减小,时间消耗增加。 每个用户只存一个自己的timeline, 当一个用户打开自己的主页的时候,会把他关注的所有用户的数据取过来,然后进行合并,因为两个原因:1. 用户的数据存在redis里,存取速度十分快;2. 一个用户关注的用户数目是有限的(限制200人);

 

但是这时候存在的问题是,随着一个用户发的消息越来越多,用户的消息列表数据会越来越长,这时候merge所有一个用户关注的用户的信息过程会耗时非常长,而且消息列表数据长的时候,大数据网络传输也会特别耗时。

 

所以我认为在拉模式下,主要要修改用户发布的消息在redis里存贮的方式;

我的意见是在redis里以如下形式存贮:

userid_datetime –> user message list

即redis为每个用户存贮了每天的消息列表,这样就可以细化数据的粒度,减少每次取数据的数据量。

如此一来:

1. 当一个用户打开自己的主页的时候,只需要取他关注的用户当天的消息列表,这样的话取的数据量就会少很多,大大减少数据的传输和合并时间;如果当天数据不足,考虑再取前一天的数据;

2. 当打开一个用户的个人主页的时时候,可以考虑取最近10天的数据,不足的时候再动态加载。

 

而在页面展示的时候,可以突出时间的分隔点:

每天和每天的数据之意加一个突出的时间分隔符:

-----------> xxxx.xx.xz <------------------

…

…

…

-----------> xxxx.xx.xy <------------------

…

…

…

这样可以让用户非常直观的感觉到一个用户的数据发布时间轴,以及自己关注的用户的活动时间轴。

 

个人的一些观点。

AI Agent工程化实践:构建微博自动化发布技能库 自动化脚本与爬虫技术是解决Web平台操作自动化的常见方案,其核心原理是通过模拟用户行为或直接调用接口实现程序化交互。在社交媒体运营领域,这项技术的价值在于能够将重复性的人工操作转化为高效、可复用的自动化流程,显著提升内容发布与账号管理效率。然而,微博等平台的反爬机制和动态页面结构为自动化带来了强反爬机制和登录态维持等工程挑战。CoPaw Skills项目正是针对这些痛点,提供了一个工程化的微博操作技能库。它采用分层架构设计,将底层平台交互与上层AI决策解耦,通过模拟浏览器操作、会话持久化管理、反爬对抗策略以 阅读详情

相关推荐

人人网2015研发笔试题D卷复盘:算法基础与系统设计

在互联网研发岗位的笔试与面试中,算法基础与系统设计始终是核心考察点。字符串循环移位、海量数据TopK等问题看似简单,却隐藏着KMP、哈希分桶与最小堆等经典原理;TCP的TIME_WAIT、InnoDB的B+树索引等基础知识,则直接对应高并发服务与数据库优化的真实工程场景。理解这些概念的技术价值,能帮助候选人快速定位考查意图,并在Feed流、缓存设计等业务系统中做到方案取舍。人人网2015年研发笔试题D卷正是这样一份兼具广度和深度的样本,本文基于亲历经验完整复盘每类题型,拆解解题思路与易错点,适合正在准备社交

weixin_30565199的博客 425

微博时间线实现方案假想

问题 徐志摩关注了2000个博主,每个博主发送200条微博,需要按照这40万条微博进行倒序浏览前200条,如何优化数据结构和算法避免40万条临时数据的重排序? 解题 直接排序40万条数据必然不可取,首先要知道用户需要浏览的数据不过只有头部的几百条而已整个40万数据的重排序完全无意义,所以解题思路就是就是优化掉"不需要"排序的数据 方案1:查询徐志摩关注的2000个博主的uid和每个博主对应的最后一条微博发送时间,按照最后发送时间倒序获取前200个博主,此时能够获取到的微博数至少为200条,再查询这200个博

学医救不了中国人 909

Redis应用场景

国内外三个不同领域巨头分享的Redis实战经验及使用场景 随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽。这里我们将为大家分享社交巨头新浪微博、传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们看新浪微博 @启盼cobain的Redis实战经验分享: 一、新浪微博:史上最大的Redis集群 Tape is Dead,Disk is Tape,Flash is Disk,RAM Locality is King. — Jim Gra

GY的的专栏 3014

关于微博热搜爬取(此爬虫旨在获取大量用户信息,字段包含,ip,账号创建时间,粉丝数,视频点赞量等,mysql保存)

概述:由于微博热搜页面是动态加载,每次请求可以获取10篇左右的文章,作者首先获取文章详情页信息,再通过抓取参与评论的用户,对筛选到的id和评论进行去重,避免用户对应错误id。详情页面的信息也是动态加载如果使用selenium,或者DrissionPage自动化库需要多次下拉点击才能显示少量数据所以此时自动化效率极低,"max_id":前一个数据包中提取",注意第一个数据包中不需要该参数。希望大家可以互相学习,学习编程是一条漫长的道路,静下心,一步一个脚印才能真正学到知识。热搜文章详情页面的uid。

ymqzhy的博客 1606

Blender - Shrinkwrap - 更方便的制作贴合模型的表面来建模

Shrinkwrap 修改器 使用 Blender 想要快速建模可以贴合现有模型表面的效果:衣服、皮肤、等效果,可以使用 Shrinkwrap 修改器,这个修改器的名字其实按照英文上的理解,翻译为:收缩的包裹效果 应用 如这块铁皮,它要贴合机身弯曲的效果,可以先建好一个铁皮,再 Shrinkwrap 到一个指定的网格上 留意的参数 Target 要贴合的对象(目前我已知是可以贴合到网格对象上,实在是方便) VertexGroup 顶点组,和之前讲到过的,顶点组可以组设顶点的权重,意思这个可.

Jave.Lin 的学习笔记 6074

转换shp坐标系之前,设置转换的投影

1.点击目录》工具箱》系统工具箱》Data Management Tools.tbx》投影和变换》创建自定义地理(坐标)变换 2.名称自定义 2.输入地理坐标系可以根据所需要转换的shp文件属性中查询出来 把图层拖入arcgis中,右键属性即可查看 3.复制坐标系,点击“输入地理坐标系”右侧的按钮后,粘贴在顶部搜索框中,并按enter键,选择对应的坐标系 4.点击“输出地理坐标系”右侧的按钮后,选择转换后的坐标系,如4326,选择后点击确认按钮。 5.自定义方法中选择

Wangwangwang___的博客 1865

微博API timeline压缩的想法

智能手机的用户越来越多,但是据统计有一半使用智能手机的人通过GPRS这样的慢速网络上网,当微博客户端使用慢速网络上网时,时间线的数据大小就成为用户体验的关键,如果能压缩数据传输,好处自然是不用说的。 让我们看看一个典型的Timeline是什么样的格式。实例如下. [code="java"] { created_at: 'Tue Nov 08 11:50:41 +0800 2011', ...

程序员的痛苦人生 283

DBeaver连接ClickHouse保姆级教程:从安装到成功测试(附驱动下载问题解决)

本文提供了一份详细的DBeaver连接ClickHouse实战指南,重点解决了驱动下载失败等常见问题。文章从环境准备、DBeaver安装讲起,详细阐述了手动配置ClickHouse驱动的可靠方案,并逐步指导完成连接配置与测试,最后介绍了基础操作与查询优化技巧,旨在帮助用户高效完成连接并快速上手使用。

pink的博客 880

架构师面试必考:Twitter/微博系统设计实战全解析

Twitter/微博作为全球领先的社交媒体平台,其核心功能围绕用户生成内容(UGC)的发布、传播和互动展开。在2025年的技术环境下,这些功能需要支撑亿级用户的实时操作,同时保证系统的稳定性和用户体验。推文发送功能用户能够快速发布文本、图片、视频等内容,支持话题标签、提及和地理位置标记。推文发布后需即时推送给关注者,并允许互动。2025年平台深度集成AI助手,如Grok等实时数据分析工具,辅助内容生成与优化。设计需重点应对高并发写入场景,热点事件下峰值流量可达每秒数十万条推文。Timeline展示功能。

zuiyuelong的博客 1513

MTK-Display技术解析:从MDP到DDP的架构演进

本文深入解析了联发科(MTK)显示技术从MDP到DDP的架构演进。MDP作为多媒体数据预处理中心,负责格式转换与缩放;而DDP则整合了OVL、COLOR、AAL等模块,并引入CMDQ与场景化模式,实现了从分散处理到统一智能调度的飞跃,旨在提升画质、流畅度并降低功耗。

weixin_29218509的博客 257

YOLOV8主干改进方法:C2f-Dual——DualConv轻量化双卷积设计(附改进代码)

DualConv是一种创新的卷积网络结构,旨在构建轻量级的深度神经网络。它通过结合3×3和1×1的卷积核处理相同的输入特征映射通道,优化了信息处理和特征提取。DualConv利用组卷积技术高效排列卷积滤波器,大大降低了计算成本和参数数量。

m0_74890428的博客 4702

新浪微博的存储思路整理架构分享--微博架构的回顾

http://blog.youkuaiyun.com/gzh0222/article/details/7645603 最近这段时间工作上的变动有点大,五月份也闲了下来一直在思考自己接下来的方向,并对这一年来的学习进行总结. 对于架构上的深入是这一年多来最主要的沉淀,从小公司到大公司,从小流量的站点的架构设计到大流量乃至超大流量的架构设计,记录下来,分享出来。 在分享自己的那点料之前,先来分享下大神Tim...

weixin_34269583的博客 333

Spring AI 实战:5 分钟搭建你的第一个 AI 应用(含完整代码)

能力关键 API适用场景基础对话简单问答、文本生成流式输出实时打字机效果@Bean模型需要调用外部工具结构化输出需要返回 Java 对象多轮对话聊天机器人场景Spring AI 让 Java 开发者可以用最熟悉的方式(Spring Boot + Maven)进入 AI 应用开发领域,不用学新语言,不用换框架,这是它最大的优势。但目前为止,我们的 AI 应用只能回答"它脑子里已有的知识"。如果让它读懂你自己的技术文档、公司内部知识库呢?这就是下一篇文章的主题——RAG(检索增强生成)实战。

qq_17204557的博客 645

设计一个feed流系统

移动互联网时代,Feed流产品是非常常见的,如朋友圈、微博、抖音等,除此之外,很多App的都会有一个模块,要么叫动态,要么叫消息广场,这些也是Feed流产品。只要大拇指不停地往下划手机屏幕,就有一条条的信息不断涌现出来。就像给宠物喂食一样,只要它吃光了就要不断再往里加,故此得名Feed(饲养)。

zhongzhh8的博客 1990

18-XLINX的XC7A100T的BANK0引脚说明

DXP_0和 DXN_0是纯输入引脚,Xilinx Artix-7 FPGA 内部集成的一个片上监控模数转换器​ 的差分模拟输入对,模数转换器​的模拟信号输入端,将外部的模拟电压​ 采样并转换为内部的数字值,是一个单向的信号采集过程。它是与 VCCADC配对的关键引脚,共同为内部的精密模数转换器提供一个纯净、安静、独立的参考地平面。多FPGA同步配置: 在多FPGA系统中,主FPGA配置完成后,可以拉低从FPGA的 INIT_B使其等待,等所有FPGA都准备好后,再同时释放,实现同步启动。

weixin_44479192的博客 234

从0到全栈:C#/.NET/.NET Core终极学习路线——2025年开发者必修的12个阶段与30个实战项目

【代码】从0到全栈:C#/.NET/.NET Core终极学习路线——2024年开发者必修的12个阶段与30个实战项目。

墨夶的博客 2042

系统设计面试核心:从QPS计算到CAP权衡的实战方法论

系统设计不是技术堆砌,而是基于业务规模的工程决策过程。理解QPS、数据吞吐量与SLA等基础指标,是架构选型的前提;CAP定理的本质并非理论选择,而是在可用性与一致性之间做出符合业务容忍度的务实权衡。技术组件如Redis缓存、Kafka消息队列、MySQL分库分表,其价值只有在真实流量压力(如秒杀峰值、Feed流高并发)下才得以验证。本文聚焦系统设计中的关键决策点——从需求量化、分片策略、缓存防穿透,到Timeline推拉模式选型,覆盖电商、社交、风控等典型场景,帮助工程师建立可落地、可解释、可演进的设计直觉

weixin_29247219的博客 89

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

355. 设计推特(系统设计)

这里「推特」,可以理解为中国的「微博」、「朋友圈」、「力扣」,真正的数据数需要存在数据库里的,并且还要加上一些非关系型的数据库(redis 等),不能是放在内存里的,这里只是简化了需求。 分析: 这是一类系统设计问题(上周我们做过的 LFU 缓存也是属于这一类问题),通常简化了很多需求,只要题目意思理解清楚,一般情况下不难写出,难在编码的细节和调试; 这里需求 3 和需求 4,只需...

INGNIGHT的专栏 338

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

超牛逼的 Feed 流系统设计!

点击上方 "程序员小乐"关注,星标或置顶一起成长关注订阅号「程序员小乐」,收看更多精彩内容每日英文Some people we clearly know to thin...

程序员小乐 1018

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

软件抄袭与创新的思考

周末不想写太多的代码,一是因为手部神经性压迫导致疼痛(职业病啊),二是因为我觉得有必要再扩大一下知识范围。在找小说未果的情况下,先是买了本微创新,然后收获挺多的,又买了两本(基于亚马逊推荐。。加上我的成功率,我想只要找到一本就可以找到另外的三本): 《微创新:5种微小改变创造伟大产品》 《第三种创新:设计驱动式创新如何缔造新的竞争法则》 《模仿的技术:企业如何从”山寨”到创新》 看完了三本书,收获还

Phodal's zenthink 2637

0到千万DAU,微淘技术架构演进之路

作者|金争争(大鹏)出品|阿里巴巴新零售淘系技术部导读:大家经常看到手淘里面的第二个TAB 就是微淘了!目前有几千万 DAU,几百亿关注关系,每天几十万的商家生产内容,对...

技术原始积累 336

系统设计模拟面试:从需求澄清到架构落地的完整指南

系统设计是后端工程师从编码走向架构的关键能力,其核心在于面对开放式问题时如何快速完成需求澄清、容量估算、模块拆分与扩展性设计。在工程实践中,无论是短链接、Feed流还是秒杀系统,都遵循同一套分析框架:先量化规模,再选型组件,最后通过数据模型与接口定义落地。容量估算作为其中最具量化说服力的环节,直接决定存储、带宽与缓存策略是否合理。系统设计模拟面试正是将这套能力转化为可表达输出训练场,通过限时演练、录音回放与追问复盘,帮助候选人适应40-60分钟的高强度表达节奏,同时反哺日常架构评审与技术方案撰写。掌握这些方

weixin_33888907的博客 324

Unity Recorder深度指南:从游戏录屏到透明动画输出的专业流程

在游戏开发和数字内容创作中,高质量的视频录制与图像序列输出是展示成果、团队协作和后期制作的关键环节。其核心原理在于直接从渲染管线捕获原始图像数据,确保画质无损与帧率精准。这项技术为开发者提供了超越传统外录软件的专业工作流,尤其在需要保留Alpha通道进行后期合成的场景中价值凸显。通过合理配置录制源、输出格式与编码参数,可以高效产出用于宣传片、特效预览和性能分析的素材。本文将聚焦Unity Recorder这一深度集成工具,详细解析其透明通道录制、抗锯齿处理与批量自动化等实战技巧,帮助内容创作者构建从录制到合

weixin_30908103的博客 317
上一篇: Jedis的Publish/Subscribe功能的运用
下一篇: Android自定义组件之自动换行View - 儒雅小生
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值