Php 存储大型会话是否会降低响应时间和服务器速度

Php 存储大型会话是否会降低响应时间和服务器速度,php,mysql,linux,facebook,session,Php,Mysql,Linux,Facebook,Session,我正在为我的网站创建一个Facebook应用程序,其中包括需要用户好友列表的功能 检索朋友没有问题,我正在努力决定的是如何存储他们 选项1-将用户存储在我的MySQL数据库中,我选择不这样做,因为我的数据库将变得非常沉重,非常快。此外,我需要为每个Facebook用户创建一个表 选项2-将Facebook好友阵列存储在一个会话中,该会话每半小时更新一次,以确保包括新好友忽略会话每半小时更新一次的事实,在会话中存储非常大的数组是一个坏主意吗 该网站可能会收到大量流量,因此将存储大量此类会话 虽然我

我正在为我的网站创建一个Facebook应用程序,其中包括需要用户好友列表的功能

检索朋友没有问题,我正在努力决定的是如何存储他们

  • 选项1-将用户存储在我的MySQL数据库中,我选择不这样做,因为我的数据库将变得非常沉重,非常快。此外,我需要为每个Facebook用户创建一个表
  • 选项2-将Facebook好友阵列存储在一个会话中,该会话每半小时更新一次,以确保包括新好友忽略会话每半小时更新一次的事实,在会话中存储非常大的数组是一个坏主意吗
  • 该网站可能会收到大量流量,因此将存储大量此类会话

    虽然我是一名经验丰富的开发人员,但在这种情况下,我对会话没有太多经验。我只是想知道这是不是一个坏主意

    给你一点关于典型朋友数组的信息:

  • 每个数组都是多维的,格式为{0[uid:1,name:Jo Bloggs,picture:test.jpg],1…}
  • 好友列表通常从100个条目到5000个条目不等,但平均约为700个条目这些都不小
  • 如果这是一种糟糕的存储好友的方法,那么还有什么其他选项(不包括MySQL)


    会话对内存(RAM)使用有影响吗?

    根据您的要求,我强烈建议在服务器上安装MemCacheD。有关更多信息,请参阅

    会话仅针对当前登录的用户,因此在会话之间很难共享信息。此外,当会话消失时,用户数据也会消失

    对于memcached,数据存储在键/值对中


    因此,对于密钥,您可以使用facebook ID,对于值,可以使用用户数据的序列化对象。

    我需要为每个facebook用户创建一个表-您不需要这样做。如果您认为是这样,那么您计划的数据库模式是有缺陷的。是的,会话对内存使用有影响,因为php在运行/读取时可以使用会话。我将使用session\u save\u处理程序在数据库中存储会话。(如果会话中存储了大量数据,您可以将数据拆分到另一个表中,以保持“正常”会话访问和表小)。不要认为阵列不会变重。至于每个人的桌子,不是问题。这就是为什么他们发明了create查询。而且,你不必这么做。以一对一的方式储存它们,你们都很好。谢谢你们的及时回复@DaveRandom,你能简单地将数组存储在一个长文本字段中吗?或者为每个用户的每个朋友创建一个包含许多行的朋友表?如果没有为每个用户提供一个表,我想不出一种方法可以做到整洁。这取决于您需要如何访问数据。如果您需要使用(例如)“此人是否与此人为好友”查询数据库,那么您将拥有一个带有FK的
    好友表,该FK指向
    用户
    表,这样您就可以执行
    从好友中选择*,其中user_id=“$userId”
    ,但如果您只需要执行“获取所有此人好友”类型的查询,您可以将所有数据以(例如)JSON的形式存储在1个BLOB列中。在有人询问之前,我会使用BLOB,因为它不受65536个字符行长度的限制。memcached似乎是用于“小数据块”。我存储的阵列相当大!这是个问题吗?我有兆字节量级的对象。但是,您只需要存储从API获得的一些信息,这样就不必浪费对已经加载过一次的项的调用。假设user1有朋友user2、user3、user4。user5有朋友user2,user6。因此,当user5在user1之后进入你的应用程序时,你不必查询API中user2的信息,因为你可以从缓存中获得它的副本。对的因此,您现在可以在每个用户对象中只存储朋友的ID(而不是完全膨胀的朋友用户对象数组)。这并没有那么简单,因为您不知道X在首次登录时是否与Y是朋友。此外,memcached将这些数据存储在RAM中,这可能会适得其反,因为我目前正试图减少服务器上的RAM消耗。你的建议非常有用,但我认为它实际上并不重要,因为它只是加快了查询速度,而不是高效地存储用户朋友。我的朋友,你从来没有使用过memcached的功能。它比你想象的要有效得多,除非你的程序员滥用它。编码人员必须构建高效的对象。Memcached与您传入的数据模型绑定。但我不明白您是如何建议我存储friends数组的。我应该将其存储在数据库中,然后“memcaching”查询结果。或者我可以简单地将数组存储在memcached中吗?