我正在构建一个面部匹配Web应用程序。
注意:我发现人们并没有将这种类型的应用程序称为facematch应用程序。
这是一个基本的工作流程。
有一个条件。用户看不到重复的匹配。如果用户已经玩过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
它没有问题。我担心的是,随着比赛数量的增加,它会变慢。
我只用2000张照片获得了1999000场比赛。这是一个巨大的数字。
所以我考虑了一个解决方案,然后创建了一个存储所有可能匹配项的新表。管理员批准照片时会创建行。
表格匹配
id1 id2 1 2 1 3 1 4 and so on
最后,我的问题是
我应该继续使用交叉连接还是应该创建一个新表'匹配'?
哪一个更好?
任何其他更好的解决方案将不胜感激!
答案 0 :(得分:2)
我认为在这种情况下你最好不存储所有匹配。正如您所知,匹配的数量是行数的二次方。根据您的用例,似乎最好保留一个包含每个用户所有看到的对的表,并在您查询该用户时将其排除。与整个组合空间相比,这可能相当稀疏。除非您需要在管理员批准时存储所有组合的数据,否则没有理由在那时生成它们。