我需要编写一个程序来计算两个用户在同一组中的次数.用户按用户名和组ID分配.例如,使用输入(存储在文本文件中):
john 32
john 21
jim 21
jim 32
bob 32
Run Code Online (Sandbox Code Playgroud)
我想要结果:
john-jim 2
john-bob 1
jim-bob 1
Run Code Online (Sandbox Code Playgroud)
这听起来微不足道.但问题是:我有1,800万组和30万用户.还有很多会员资格(我预计每个用户平均至少50个,可能更多).这意味着大量的数据和处理.
我写了5个不同的程序,没有一个能够减少数据量:它像PostgreSQL查询一样慢.耗尽内存消耗在Java工作内存中的Map中运行(第一个堆空间,在优化之后我得到了罕见的"超出GC开销限制").从Java连续写入数据库太慢(即使使用批处理查询进行优化).越来越绝望,我尝试了一些更奇特的东西,比如把所有的对都写成一个数组,然后对它们进行排序(O(n log(n)))然后将它们计算为peuàpeu.但仍有太多数据需要存储在内存中.
有关算法的任何想法吗?还是不可能?