【发布时间】:2012-01-30 10:51:20
【问题描述】:
我正在为我的网站创建一个 Facebook 应用程序,其中包括需要用户朋友列表的功能。
找回好友没问题,我纠结的是如何存储。
- 选项 1 - 将用户存储在我的 MySQL 数据库中,我选择不这样做,因为我的数据库会很快变得非常沉重。此外,我需要为每个 Facebook 用户创建一个表!
- 选项 2 - 将 Facebook 好友数组存储在每半小时更新一次的会话中,以确保包含新朋友。 忽略会话每半小时更新一次的事实,在一个会话中存储一个非常大的数组是不是一个坏主意?
该网站可能会收到大量流量,因此会存储大量此类会话。
虽然我是一位经验丰富的开发人员,但我对这些情况下的会话并没有过多的经验。我只是想知道这是否是一个坏主意?
只是给你一些关于典型朋友数组的信息:
- 每个数组都是多维的,格式为 {0[uid:1,name:Jo Bloggs,picture:test.jpg],1...}
- 朋友列表的范围通常从 100 项到 5000 项,但平均约为 700 项。这些不小!
如果这是存储朋友的不好方法,还有哪些其他选项(不包括 MySQL)?
会话对内存 (RAM) 使用有影响吗?
【问题讨论】:
-
I will need to create a table for each individual Facebook user!- 你不需要这样做。如果你认为你这样做了,那么你计划的数据库架构就有缺陷。 -
是的,会话对内存使用有影响,因为它们在运行/读取时可供 php 使用。我会使用 session_save_handler 将会话存储在数据库中。 (如果真的大量数据存储到会话中,您可以将数据拆分到另一个表中以保持“正常”会话访问和表小)。
-
使用数据库,这就是它的用途。并且不要认为阵列不会变重。至于每个人的桌子,不是问题。这就是他们发明创建查询的原因。此外,您不必这样做。以多对多的方式存储它们,一切都会好起来的。
-
感谢您的及时回复。 @DaveRandom,您是否只需将数组存储在长文本字段中?或者有一个朋友表,每个用户的每个朋友都有很多行?如果没有为每个用户提供一张桌子,我看不出有一种方法可以整齐地完成它。
-
这取决于您需要如何访问数据。如果您需要使用(例如)“此人与此人是朋友”来查询数据库,那么您将有一个
friends表和users表的 FK,因此您可以执行SELECT * FROM friends WHERE user_id = '$userId',但是如果您只需要执行“获取所有这些人的朋友”类型的查询,您可以将所有数据存储在 1 个 BLOB 列中作为(例如)JSON。在有人问之前,我会使用 BLOB,因为它不受 65536 个字符的行长度限制。
标签: php mysql linux facebook session