php-扩展数据,减少加载时间,让我的虚拟主机高兴的最佳方法

对于Facebook应用程序,我必须在MySQL数据库中存储用户的朋友列表.向我的数据库请求此列表,并与其他数据进行比较等.

目前,我将此朋友列表存储在我的用户表中,朋友的uid放在一个“文本”字段中,并带有一个“ |”作为分隔符.例如:

ID – UID – NAME – FRIENDS => 1 – 123456789 – John Doe – 987654321|123456|765432

我的PHP文件请求此行,并通过展开该字段(‘|’)提取朋友列表.一切正常,每1000个用户大约有5MB磁盘空间.

现在的问题是:

为了增加功能,我还需要保存用户朋友的姓名.我可以用不同的方式做到这一点:

1)将此数据保存在额外的表中.例如:

ID – UID – NAME => 1 – 1234321 – Jane Doe

如果需要ID为1234321的朋友的姓名,我可以从此表中请求姓名.但是,问题在于该表将继续增长,直到对Facebook上的所有用户建立索引(> 5亿行)为止.我的虚拟主机不会这样!这样的表将占用大约25GB的磁盘空间.

2)另一个解决方案是通过在好友字段的UID中添加名称来扩展用户表中保存的数据(使用额外的分隔符,让我们使用“,”).例如:

ID – UID – NAME – FRIENDS => 1 – 123456789 – John Doe – 987654321,Mike Jones|123456,Tom Bright|765432,Rick Smith

对于此解决方案,我必须更改脚本,添加另一个额外的爆炸(‘,’)等.我不确定这将占用多少额外的磁盘空间…但是数据不容易处理这条路!

3)第三种解决方案可以很好地概述所有数据,但会导致数据库庞大.在此解决方案中,我们创建了一个朋友表,每个友谊都有一行.例如:

ID – UID – FRIENDUID => 1 – 123456789 – 54321

ID – UID – FRIENDUID => 3 – 123456789 – 65432

ID – UID – FRIENDUID => 2 – 987654321 – 54321

ID – UID – FRIENDUID => 4 – 987654321 – 65432

正如您在本例中看到的那样,它很好地概述了所有友谊.但是,大约有5亿用户,也就是说,平均每位用户300个友谊,这将创建一个包含1500亿行的表.我的主机肯定不会喜欢…而且我认为这种表将占用大量磁盘空间…

那么…如何解决这个问题?您认为,在Facebook上存储用户朋友的UID名称的最佳方法是什么?如何缩放此类数据?或者,除了上述三种可能性之外,您还有其他(更好)的解决方案吗?

希望你能帮我!

解决方法:

我同意Amber的观点,解决方案1将是存储此数据的最有效方法.如果您要坚持当前的方法(类似于解决方案2),则可能需要考虑将友谊数据存储为JSON字符串.它不会产生最短的字符串,但是很容易解析.

要保存数据:

$friends = array(
    'uid1' => 'John Smith',
    'uid2' => 'Jane Doe'
);

$str = json_encode($friends);

// save $str to the database in the "friends" column

取回数据:

// get $str from the database

$friends = json_decode($str, TRUE);

var_dump($friends);
上一篇:Android Facebook SDK-authorizeCallback()问题


下一篇:Ubuntu为长指令设置别名创建简写指令短命令