问题描述
源数据(无限大,内存装不下):#来源IP.端口,目标IP.端口,字节大小111.195.4.251.4000,111.161.52.199.8000,839111.195.4.251.4000,111.161.52.199.8000,823111.161.52.199.8000,111.195.4.251.4000,431111.161.52.199.8000,111.195.4.251.4000,167......需求:求TOP10,相同来源IP+目标IP的字节和,并按字节大小排序如上面的输出为:111.195.4.251.4000,111.161.52.199.8000,1662111.161.52.199.8000,111.195.4.251.4000,598...请教大家,改怎么设计数据结构?求大神给个思路.用java实现.
解决方案
解决方案二:
”来源IP.端口,目标IP.端口,“不知道你这种形式的数据是不是连续存储在文件中的。如果出现下面这样的情况,暂时还没想到解决办法。如果来源IP.端口,目标IP.端口,是以连续的方式存在文件中。那就建立一个10元素的最小堆。111.195.4.251.4000,111.161.52.199.8000,839111.161.52.199.8000,111.195.4.251.4000,431111.195.4.251.4000,111.161.52.199.8000,823
解决方案三:
引用1楼mxway的回复:
”来源IP.端口,目标IP.端口,“不知道你这种形式的数据是不是连续存储在文件中的。如果出现下面这样的情况,暂时还没想到解决办法。如果来源IP.端口,目标IP.端口,是以连续的方式存在文件中。那就建立一个10元素的最小堆。111.195.4.251.4000,111.161.52.199.8000,839111.161.52.199.8000,111.195.4.251.4000,431111.195.4.251.4000,111.161.52.199.8000,823
这个源内容是tcpdum-nfOqt出来的数据.
解决方案四:
现在的需求是,给你100M的数据,然后找出TOP10.
解决方案五:
引用2楼alexaswx的回复:
Quote: 引用1楼mxway的回复:
”来源IP.端口,目标IP.端口,“不知道你这种形式的数据是不是连续存储在文件中的。如果出现下面这样的情况,暂时还没想到解决办法。如果来源IP.端口,目标IP.端口,是以连续的方式存在文件中。那就建立一个10元素的最小堆。111.195.4.251.4000,111.161.52.199.8000,839111.161.52.199.8000,111.195.4.251.4000,431111.195.4.251.4000,111.161.52.199.8000,823这个源内容是tcpdum-nfOqt出来的数据.
100M的内存不算大。怎么说内存装不下呢。先使用hashmap或treemap将数据统计好,然后再使用最小堆。
解决方案六:
引用4楼mxway的回复:
Quote: 引用2楼alexaswx的回复:
Quote: 引用1楼mxway的回复:
”来源IP.端口,目标IP.端口,“不知道你这种形式的数据是不是连续存储在文件中的。如果出现下面这样的情况,暂时还没想到解决办法。如果来源IP.端口,目标IP.端口,是以连续的方式存在文件中。那就建立一个10元素的最小堆。111.195.4.251.4000,111.161.52.199.8000,839111.161.52.199.8000,111.195.4.251.4000,431111.195.4.251.4000,111.161.52.199.8000,823这个源内容是tcpdum-nfOqt出来的数据.
100M的内存不算大。怎么说内存装不下呢。先使用hashmap或treemap将数据统计好,然后再使用最小堆。
数据大小不是固定的,比如他们网络流量比较的时候,每秒就100M.所以我还是想考虑源数据在无限大的情况下实现.
解决方案七:
现在应该没有任何一个计算机可以处理无限大的数据吧
解决方案八:
引用6楼mxway的回复:
现在应该没有任何一个计算机可以处理无限大的数据吧
看来需要大数据处理
解决方案九:
既然是动态产生,那你就通过管道流随时处理,设定一个时间段内的前十,最后再对一个大时间段内的多个前十整体排序,提取前十。
解决方案十:
引用8楼skyhitnow的回复:
既然是动态产生,那你就通过管道流随时处理,设定一个时间段内的前十,最后再对一个大时间段内的多个前十整体排序,提取前十。
用storm处理了.
解决方案十一:
只能分段进行计算了