我正在构建/架构一个业务社交网络Web应用程序,该应用程序具有一个组件,我认为该组件会导致重大的可伸缩性问题,我想就最佳的前进方式获得一些反馈/想法。
该应用程序具有一个User对象。这个想法是,每次新用户加入系统时,他都会根据一系列因素对其他人的“有用性”进行排名。类似地,系统上的所有其他用户都对他/她进行排名。
但是,我担心这种方法的可扩展性。例如,如果有10,000个用户加入系统,那么我们正在谈论将10,000 ^ 2计算存储到数据库中。那就是1亿条记录,因此显然在计算这些排名所花费的时间以及在将其存储在数据库中方面都成为问题。
因此,我正在寻求帮助/启发:)
我的背景是Java,我一直在寻找hadoop / map-reduce作为以并行方式实现计算的一种可能方式,但是我真的不确定这个问题是否适用于Map Reduce或什么是一般而言最好的方法。
因此,我想查询有两个具体部分。
1)要进行实际计算,是否应以并行方式进行,即.is Map减少此问题的一种好方法
2)要存储排名,我应该使用什么...是一个标准的关系数据库是一个坏主意,即...这对于MySQL来说不是一个很好的选择...我应该看看Cassandra,HBase之类的东西或其他一些NoSQL解决方案?
任何帮助/想法,我们将不胜感激。
干杯,
布赖恩
最佳答案
在将MapReduce的蛮力付诸于问题之前,我会尝试减少搜索空间。如果它是一个甚至有1万个用户的社交网络,这意味着对于特定用户而言,大多数其他用户是未知的,因此没有用。
因此,我将尝试限制用户根据适合您的社交网络的条件进行评估的空间。例如,将搜索范围限制为本地用户可能是适用的(或最初将搜索范围限制为本地用户,然后再进行更详尽的搜索)。实际上,“本地”的含义取决于您的用户,其想法是根据实际情况使用一些优化。
关于architecture - 针对大数据问题的可伸缩体系结构解决方案的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3212614/