我可以为一个多个用户的会话变量保存一大堆userID吗?

时间:2009-07-28 21:19:20

标签: php mysql session

好的我有一个社交网络,到目前为止大约有50,000个用户,并且有一个朋友表显示谁是您网站上的朋友,此表超过一百万行

这不是一个棘手的部分,我向用户发布公告,状态帖子,只有您朋友列表中的人才能看到的内容。 请记住表格的大小,目前用户表约为50,000,朋友表约为100万

获取好友列表以了解要向用户显示的帖子状态的一种方法是在下面运行此查询并将结果放入数组

select friendid from friend_friend where userid=1 and status=1

然后我将这个数组转换为逗号分隔列表并在mysql查询的IN子句中使用它来获取允许该用户查看的帖子

希望到目前为止有道理。

现在如果我将这个朋友数组保存到会话变量怎么办,因为这个查询经常运行? 我看到的一个缺点是,如果用户在登录时将该人添加为朋友,他们会在该会话重置之前显示为该朋友,但除此之外,这会对内存或任何会话使用造成不良影响吗

另请注意,有时会有多达500个用户登录,而且有些用户名列有10,000个朋友ID,这是PHP / MySQL设置

关于会话数据的另一个问题,它是存储在文件中而不是系统内存正确吗?如果它是在磁盘而不是内存,那么内存不应该是一个大问题吗?

2 个答案:

答案 0 :(得分:3)

你看过memcached吗?这篇文章(http://highscalability.com/memcached-and-storage-friend-list)及其评论强调了你的方式与卸载到memcache的优缺点。

答案 1 :(得分:1)

也许你会想要动态地回应这个问题。

如果,假设用户拥有超过X个朋友,请不要缓存它。想想当用户拥有很多朋友并且你需要通过连接推送整个数据时会发生什么......我认为用户认为这比每次需要查询列表时的性能降低更大。

根据我对php / mysql的经验,这是我的意见......也许有理由做你提出的建议^

问候