做一个聊天应用练习, 碰到一个问题, 如何保存用户好友列表?
如果用mysql关系数据库做后端数据库, 那么面临两个选择:
1. 使用一个字符串, 保存所有好友信息:
查询时: 将字符串读出(查询快), 做一下类型转换(CPU消耗), 增加、修改或者删除某个好友的时候, 都要执行update该字段的操作
1. 使用外键, 在数据库中创建一个好友table, 保存所有好友信息:
id | friendId | friendName |
---|---|---|
Jane | f_id1 | f_name1 |
Tom | f_id2 | f_name2 |
Jerry | f_id3 | f_name3 |
Judy | f_id4 | f_name4 |
查询时: 通过外键, 查询到相应的所有好友(查询相对较慢), 但是增加,修改,删除的时候比较方便, 并且还有一个更大的好处, 就是可以全局管理到所有好友信息, 可以给用户更多的推荐, QQ上共同好友/好友推荐就是通过数据挖掘搞出来的; 微信我想比较像第二种方法, 就是替用户保存一个电话本, 上面的内容在微信服务器上是没有继续深度挖掘的. 或者有保存, 但是没有在前端表现出来.
总结
- 使用字符串保存一个friends列表, 有查询速度快的优势, 不用在另一个表中select一下, 这对于经常登陆的实际场景来说是很有用的、
- 另外维护一个table, 带来了性能上的丢失, 但是能够获得更多关于所有用户的信息, 比如关系网, 共同好友, 等等, 这好想属于数据挖掘的范畴, 对于基本功能不是很影响. 所以可以先采用第一种字符串保存方法, 并在系统空闲的时候, 用另一个java程序挖掘好友信息, 然后在处理计算满足功能, 向用户推出相应的信息.