处理大型数据集的有效解决方案

时间:2014-07-14 14:24:10

标签: performance time-complexity large-data

我有一个由用户使用的应用组成的数据集,我试图找出不同应用之间的相关性。目前,我有一个与200,000个用户和800,000个应用程序相关的数据集(1GB文本文件)。我正在寻找一种有效的方法来构建一个矩阵,该矩阵显示已经安装特定应用程序的用户数量。例如,请考虑以下矩阵:

      app1  app2  app3  app4
app1  0     100   300   50     
app2  100   0     350   0
app3  300   350   0     70
app4  50    0     70    0

值100表示​​在手机上同时安装app1和app2的用户数。为了创建这个矩阵,我想到第一个用userID(O(n)?)排序/过滤(使用Map / Reduce)/聚合(在MongoDB中)主要的未排序数据文件,然后是每个用户使用的应用程序,有2个嵌套循环计算一起安装的应用程序数量(即获取上述矩阵中的值)。但这是如此昂贵( O(n ^ 3)?)并且不可扩展。

当然,我是关于多线程并在某个集群上运行程序的,但我首先需要一个可扩展且高效的算法/工具(例如使用动态编程?)。我对大型数据集中GNUPlot的性能印象深刻,我希望能够达到类似的性能。

我对编程语言的偏好是Java,但我也考虑过R(和相关的HPC包)以及Bash,虽然我不熟悉R.我也想过&#34 ;图形数据库",像Neo4J,但我不确定它们是否适合我手头的问题(我将来需要对数据进行图形可视化)。

1 个答案:

答案 0 :(得分:2)

你有没有想过要做什么?

有80万个应用。 800000 x 800000矩阵将占用近5 TB的存储空间。虽然这对现代硬盘很有用,但肯定你可以更好地处理所有存储。

最好为每个应用程序存储已安装应用程序的用户的排序列表。通过这种方式,您可以使用集交集算法来隐式地快速计算矩阵的条目。

您需要更具体地说明您将对此数据下游做些什么,以获得有关如何表示它的建议。