随笔分类 - 大数据处理
摘要:今天晚上做了一个在线测评,其中涉及到了一个海量数据处理的问题,下面是这个问题定义及我的解法,其中用到了Bloom Filter,这个东西乍一听让人摸不着头脑,仔细看看,感觉就是Hash+Bitmap的合体,综合了Hash散列定位和Bitmap用位存储的特点。问题:已存在20亿个URL,每个URL平均长度为64字节,在2G内存的环境中,设计一个较快的算法去判断一个新的URL是否在那20亿URL中,可以出现一定几率的误判。思路:使用Bloom Filter的方法,将这20亿个URL映射到内存中,该内存空间初始化为0,每个URL映射到一个bit位,遍历已有的20亿个URL,并将对应的bit位置为1,
阅读全文
摘要:我在前面的随笔里已经写过关于处理海量数据的哈希表和Trie的方法了,本文提到的是常用方法之一:Bitmap,测试数据是100万条随机数。Bitmap是用于处理有限位数的整数,理论上,对于1GB的内存,处理的整数范围大约在0-8,000,000,000内,即一般处理10亿以内,同时也是10位数以内的数据,可实现的操作有存储,排序,查找,删除,查重而朴素的方法处理10亿的整数需要40GB以上的内存空间,所以,在int用32位表示的机器上,理论内存空间使用比例为1:32,我在下面的代码里用到的测试数据是100万条1亿以内的随机数,完成增删查排序功能。欢迎有共同学习兴趣的同学加好友探讨学习哦~~^_^
阅读全文
摘要:目前我所了解的海量数据处理的方法包括:哈希,树,归并排序,bitmap等,之前发过测试哈希表的随笔,这一篇则是针对第二种方法:树。我写了一个Trie树的简单实现,以摘自某网站上的超过100万条的URL为测试数据,算是个小型的海量数据了,检索其中一条记录所消耗的时间为0毫秒,实际是在1毫秒之内,也就是很快的意思。清空这个树需要DFS或者BFS,我暂时没有实现它,也就是说,下面的代码,没有主动完成释放内存空间的功能。欢迎有共同学习兴趣的同学和我沟通哦 ^_^上代码: 1 #include 2 #include 3 #include 4 #include 5 /** 6 * @a...
阅读全文
摘要:直接上代码吧,哈希表的逻辑还是很简单的,目的是对比这几种方法的速度,重要的是参照代码,看输出结果: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 13 using namespace std; 14 15 static const int hashtable_length = 49157; 16 17 // 用于定位一个Bucket 18 ...
阅读全文
浙公网安备 33010602011771号