2 个人的多条 聊天记录怎么保存在同一个字段里

2017-04-17 17:13:22 +08:00
 gongziqi

最近做一个即时通讯 web ,这个怎么做呢?

2002 次点击
所在节点    程序员
15 条回复
ss098
2017-04-17 17:50:44 +08:00
JSON 格式存储
em70
2017-04-17 17:54:29 +08:00
XML 也可以
johnny23
2017-04-17 19:06:20 +08:00
你这个需求太可怕了...
gongziqi
2017-04-18 08:58:54 +08:00
@ss098 存储到数据表怎么操作??(一条=一条插入 的话就建议了?)
zwl2012
2017-04-18 13:27:39 +08:00
另外创建一个记录表吧,你强行放到一个一段的话扩展性几乎没有。后面多人聊天怎么办?要撤回 /删除某个聊天记录怎么办?
gongziqi
2017-04-18 14:53:37 +08:00
@zwl2012 老铁 ,我就想问下 聊天记录是怎样的存储过程?一条条插入还是用其他技术插入??
zwl2012
2017-04-18 15:50:08 +08:00
就一个聊天记录表,字段有 id 时间 归属用户 目标用户 状态 ;调取某段会话直接根据目标用户查表再按时间排序即可。记录是一条一条插入的。
fyyz
2017-04-18 16:39:01 +08:00
三个字段:
1 ,发送者 ID
2 ,接受者 ID
3 ,内容

可以扩展,添加这些字段:
4 ,发送时间
5 ,接收时间,为空则未接收

如果有群组再扩展(针对第二个字段):
7 ,接收者类型( enum[个人,群组,讨论组])
...
fyyz
2017-04-18 16:41:25 +08:00
4 能让以后浏览聊天记录很方便,还能实现消息未发送成功提醒,避免客户端反复重新发送,其实就是应用层的 ACK 包。
5 能实现离线消息功能。
fyyz
2017-04-18 16:42:20 +08:00
其实我非常建议看看 TCP 的实现,我这套方案基本上是照着 TCP 的原理出的。
fyyz
2017-04-18 16:47:34 +08:00
如果你要全部放进一个字段也可以,把我上面说的这些字段全部丢一个 json 里。但是弊端是,如果我要查看某两个用户的全部聊天记录,你就不能写出这种 SQL 了:

select * from chat_log where (sender_id = 1 and recver_id = 2) or (sender_id = 2 and recver_id = 1)

你必须在业务层遍历所有的聊天记录 json ,然后逐条分析。
gongziqi
2017-04-19 11:26:30 +08:00
@fyyz 我想问下大兄弟,对于聊天记录你能提供个思路给我吗?就是我现在做的 web IM ,用 websocket z 做协议。现在的想法是一条一条插入表字段中,但是这样太耗资源了,有没有新的办法?还有那个(
ID VARCHAR2(32) not null,聊天记录 id
CREATE_TIME DATE,创建时间
CONTENT CLOB,聊天内容
SEND_ID VARCHAR2(32),发送用户 id
RECEICE_ID VARCHAR2(32),接收人 ID'
STATES CHAR(2) default 0
) 这是我的表设计,对于插入记录和查询记录(发不同的人和点不同的人 插表 )怎样做好点呢
fyyz
2017-04-20 09:43:05 +08:00
我想我已经说得很清楚了,但是我没有看懂你的问题:
对于插入记录和查询记录(发不同的人和点不同的人 插表 )怎样做好点呢
这话什么意思?
gongziqi
2017-04-20 10:23:49 +08:00
@fyyz 就是我这边打开记录看你的,你那边打开记录看我的 这种 sql 是这样一个写法?谢谢 啊
fyyz
2017-04-20 10:26:38 +08:00
在 11 楼写得很清楚了。仔细看下?当然这种 SQL 必须配合我楼上给出的表结构。

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

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

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

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

© 2021 V2EX