2012-07-31 54 views
1

在我的要求中,网站上的每个用户都可以看到附加到其他用户的分数。它根据他们的配置文件参数进行计算。我给别人的分数将是1分,但他们对我的分数将是另一分。需要数据库中的用户到用户数据。如何避免灾难?

我在MySQL数据库中已经做了迄今为止 表所示:

 
___UserID1___|___UserID2___|___Score___|___Last_Uopdated___ 
    1   |  2  | 45  | 1235686744 
    2   |  1  | 24  | 1235645332 

当用户查看某人的页面,如果在数据库中,如果存在这种对记录我的分数类检查不是,计算并记录它。这工作正常,因为没有人会绝对看到网站上的每个用户页面。

现在我需要吸引用户并根据分数进行排序。所以我想,我可以创建一个cronjob,并且每天晚上都运行它,因此它会更新数据库中的分数并为每对用户创建它们。

那么,问题是我正在为超过50万用户计划一个系统,我很担心,它会将我的数据库关闭并创建巨大的数据库。因此,对于500,000我们正在谈论大约250亿条记录...:/

有没有人知道任何其他方式来创建此功能?可以即时计算......或以其他方式计算?

+1

你为什么不在飞行中计算它? – 2012-07-31 06:31:58

+1

为什么用户分数取决于查看用户配置文件的用户?或者用户可以分配个人点给彼此? – 2012-07-31 06:33:40

+0

问:当user1登录时,他究竟看到了什么? 499,999行,为他的“相对”分数给对方用户?或者是什么? – paulsm4 2012-07-31 06:35:43

回答

0

如果我处于您的情况,我会即时创建计算。我会使用你的函数生成分数,然后将这些值存储到数据库中。这样,每当任何用户访问任何页面时,分数都会更新。这是一种渐进式方法,而不是试图在一次可能的每一种组合上运行该功能。再加上没有更多的数据库灾难:)

如果你有一个页面,所有的用户评分排名,它会更简单,如果你使用分页和使用ORDER BY和OFFSET,SQL查询的LIMIT功能,而不是全部获取用户一次。