某浪微博的 @跟话题是怎么存起来的?

2020-09-22 10:23:24 +08:00
 ohyeahhh

项目需要做一个跟微博一样的功能,发动态的时候可以 @用户,还可以添加话题,而且点击 @的用户或者话题能够跳转,这种需要怎么存的,初步想法是给这俩加上 html 标签,因为还要变色。背景是要给 app 内用的,我们用 h5 页面来实现

2505 次点击
所在节点    程序员
12 条回复
laoyur
2020-09-22 10:29:06 +08:00
说起来可能很丢人,一大段经过了多次转推多次 at 的长内容,我甚至都分不清哪段话是谁说的……
TomatoYuyuko
2020-09-22 10:39:18 +08:00
遇到过同款 tx 面试题,我的当时的回答是记录特殊符号的位置,全文存储字符串,再加一个特殊位置的存储,渲染的时候再处理成特殊标签
huifer
2020-09-22 11:02:07 +08:00
@返回的信息如下{"id":1,"login_name":"huifer"}, 前端将 login_name 用来放在页面上显示. 贴上<a>标签或者其他跳转标签. 将整个文本存储到 DB. # 也是类似操作

github 上的一个地址

<p><a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/huifer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/huifer">@huifer</a> test</p>

具体如果还想存储的详细一些,可以将 @和#切割出来. 在存储
[{"@index":1,value:"user_id"}]
opengps
2020-09-22 11:13:51 +08:00
就是个关键字替换逻辑, @id+空格,检索下是否包含此 id 用户,数据库只存文本应该足够,数据库处理通知逻辑
mingyec88
2020-09-22 14:05:48 +08:00
@laoyur 原来有这困惑的不是我一个人哈哈哈
janda
2020-09-22 14:28:40 +08:00
@huifer 相当于是数据库存储富文本是吧、然后显示的时候就解析成 html
huifer
2020-09-22 16:06:27 +08:00
@janda yep 从存储上直接放富文本还是蛮快的. 或者 占位符 然后通过后面的 json 将占位符替换掉
poorcai
2020-09-22 16:24:22 +08:00
我也想知道。话说 v 站是不是也有这个功能?
0x0208v0
2020-09-22 17:52:15 +08:00
同问,这种东西在大流量高并发下是怎么实现的
songco
2020-09-22 23:47:34 +08:00
原文存储,展示时解析转换不就挺好

我记得这玩意比较麻烦的是量大的时候怎么通知 followers 还有被 @的人
no1xsyzy
2020-09-23 03:50:41 +08:00
@songco 这个好像 reddit 写过一篇技术文章?只记得用的 kafka
no1xsyzy
2020-09-23 03:52:02 +08:00
目前看下来最稳健的还是 Twitter 的办法。
前端时间回过一贴 https://www.v2ex.com/t/704946#r_9470684

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

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

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

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

© 2021 V2EX