大型网站(如约会网站)如何存储所有用户之间的比较?

How can a large website (like a dating site) store comparisons between all it's users?

所以,让我思考的数学是,500 万用户 - 我们希望能够根据相似度和其他各种可能使现场计算不切实际的任务进行排名。

5,000,000 ** 2 = 25,000,000,000,000

即使我们假设每条比较记录都是1 Byte,也就是25 PBytes!更不用说更改用户数据时的大量处理了。

这只是做这样一个任务的成本吗?什么技术(软和硬)可以用来存储 trillion records? (而且他们可能希望每个都明显大于 1 个字节!)
或者对于此类问题还有其他更好的解决方案吗?

我们通常使用各种算法过滤技术来处理前端:一开始就在一个小子集上进行训练,使用定制的标量相似性度量对数据进行聚类或将其转换为稀疏图。这种聚类使我们能够从现有匹配项中得出关于可能匹配项的基本推断。利息门槛也有影响。

例如,假设 A 和 B 在同一个集群中,匹配度为 0.94。 Y 和 Z 在另一个簇中具有相同的值。然后我们进行一些集群间检查——发现 A 和 Z 在 0.10 处匹配。如果我们的兴趣阈值为 0.80(并且我们可能会为每个集群调整它),那么我们就知道 B 和 Y 不可能达到该阈值。在大多数情况下,我们可以消除 B 的整个聚类而无需进一步计算:根据从我们的相似性度量得出的距离度量,我们可以针对已经针对 A 测量的任何人设置 B 的严格截止值。

此外,当我们寻找 "best N matches" 时,我们可以通过在 B 的本地集群中进行一些检查来提高该标准。一个新用户得到类似的待遇:用一个集群识别,也许其他几个被注意到,其余的是具有高阈值的衍生。

更改用户数据不需要比引入新用户更多的工作,而且通常更容易,因为数据更改不多。用户的原始记录很可能是正确的接触点。

您的后端问题在发布问题之前有部分答案here. There are a lot of large-DB tools to handle big data, research you should have done

此外,还有一些大数据 machine-learning engines 出现在现场,此外还有一些更成熟的数据(再次是研究)。

免责声明:我在英特尔的可信分析平台上工作。这里的意见和建议是我自己的。