【问题标题】:Can I save a very large array of userID's to a session variable for multiple users?我可以将非常大的用户 ID 数组保存到多个用户的会话变量中吗?
【发布时间】:2009-07-29 05:54:03
【问题描述】:

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

这不是棘手的部分,我会显示用户发布的公告、状态帖子,以及仅对您朋友列表中的人可见的内容。 记住表的大小,到目前为止用户表大约 50,000 个,朋友表大约 100 万个

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

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

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

希望到目前为止这是有道理的。

现在如果我将这个朋友数组保存到一个会话变量中,因为这个查询运行得非常频繁? 我看到的一个缺点是,如果用户在登录时将该人添加为朋友,他们会在该会话被重置之前显示为朋友,但除此之外,这对内存或任何会话使用的性能都会不好?

另请注意,有时登录的用户多达 500 个,有些用户的好友列表包含 10,000 个好友 ID,这是 PHP/MySQL 设置

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

【问题讨论】:

    标签: php mysql session


    【解决方案1】:

    您是否研究过 memcached?这篇文章 (http://highscalability.com/memcached-and-storage-friend-list) 和它的评论,强调了你的方式与卸载到内存缓存的优缺点。

    【讨论】:

      【解决方案2】:

      也许您想动态地响应这个问题。

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

      这是我根据我在 php/mysql 方面的经验所得出的意见...也许无论如何都要按照你的建议去做 ^

      问候

      【讨论】:

      • 其实这是个好主意,我相信无论我走哪条路,它都会在某个地方发挥作用
      猜你喜欢
      • 2012-06-07
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多