tg 和飞书都有那种给消息添加 emoji 交互的功能,可以显示有多少人用某个 emoji 附到消息下面 想实现相似的功能,但感觉如果每条新增的 emoji 都按用户 id ,消息 id ,emojiid 这样按行存数据库里会不会比较低效?
1
bigfei 222 天前 via Android
JSON format 直接保存在消息的附加属性里,没必要用关系型数据库处理。
|
2
gaobh 222 天前 via iPhone
都是转义成文本,前端渲染的?不太了解这个。不过大部分好像都可以转成[大哭]这种的显示
|
3
IvanLi127 222 天前
没必要开张表存,那个东西基本上只有在显示这条消息时展示,只要你的数据库支持 json 类型,直接在当前消息的记录里存上一个 json 或者子文档就完事了,有人加表情直接操作 json 加数据就行了。
|
6
IvanLi127 222 天前
@des 我觉得没啥问题,数据库支持 json 类型的情况下想操作和查询 json 都是有内置函数的。我假设 pg 或 mongo ,其他数据库支持情况我不太熟。
|
7
airyland 222 天前
emoji 操作分表保存不是问题,但汇总数量可以缓存。
|
8
codegenerator 222 天前
如果是客户端可以放单独一列
如果在服务器上,那没有办法 im 消息就是只能每个单独行存 |
9
twing37 222 天前
添加的 reaction 记录是这样的(这样用户可以查看谁添加了该 reaction,支持对应用户的取消,添加操作,数据量多了分页查看即可).但所有 reaction 的统计需要缓存的.为了效率.
|
10
debuggerx 222 天前
@des 你说的情况用 json 完全没问题,但注意说的是数据库的 jsonb 类型,而不是 json 转字符串存储。你可能是以为 1w 个人点击了,读取判断的时候就得返回包含 1w 人数据的 json 字符串,有一个人取消了,就得 update 一个 9999 人数据的 json 字符串?而实际是用 jsonb 类型字段做这个事情,新增和删除都只需要用语句直接更新变化的部分(用||和-操作符),判断某人是不是有 reaction 也只需要用 @>操作符就可以直接拿到,甚至有办法直接对 jsonb 字段的内容做分页,所以不管是代码简洁程度还是效率都很好的。
|