2011-03-26 31 views
2

我正在构建一个脸部匹配的Web应用程序。哪一个性能更好?交叉连接还是新表?

注意:我发现人们不会将这种类型的应用程序称为facematch应用程序。

这是一个基本的工作流程。

  1. 用户上传照片
  2. 管理员可以批准/拒绝照片
  3. 当用户访问该页面,两张照片是随机从数据库中选择。
  4. 用户有两种选择
    1. 选择照片
    2. 跳到另一场比赛

有一个条件之一。用户看不到重复的匹配。如果用户已经玩过1对2,那么用户再次看不到2对1。

比方说,我有以下的4张照片

表照片

 
id 
1 
2 
3 
4 

有6个可能的匹配。那些是

 
1 vs 2 
1 vs 3 
1 vs 4 

2 vs 3 
2 vs 4 

3 vs 4 

为了使那些匹配,我使用下面的交叉连接查询。

select p1.id, p2.id from photos as p1 cross join photos as p2 where p1.id < p2.id 

它的工作没有问题。我担心的是,随着比赛数量的增加,速度会变慢。

我得到1999000匹配只有2000张照片。这是一个巨大的数字。

所以我想到了一个解决方案,并想出了创建一个新的表,存储所有可能的匹配。这些行是在管理员批准照片时创建的。

表匹配

 
id1 id2 
1 2 
1 3 
1 4 
and so on 

最后,我的问题是

我应该继续使用交叉连接,或者我应该创建一个新表“匹配”?

哪一个更好?

任何其他更好的解决方案,将不胜感激!

回答

2

我想在这种情况下,你最好是而不是存储所有匹配。正如你已经想出的那样,匹配的数量是行数的二次方。根据您的使用情况,似乎最好将每个用户看到的所有对都保留在一张表中,并在查询该用户时排除它们。与整个组合空间相比,这可能相当稀疏。除非您需要在管理员批准时存储所有组合的数据,否则当时没有理由生成它们。

+0

//谢谢你的回复。我担心的是......它可能会很慢,很多并发连接在哪里..小编说50000.我的MYSQL会与这个交叉连接查询相符吗? – Moon 2011-03-26 21:06:58

相关问题