ORACLE 海量数据去重 查缺 处理,求Oracle解答 ORACLE海量数据去重 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得还是用oracle自身的方式比较好,毕竟在数据检索方面,我们都没有oracle专业数据量较大,删除时可以考虑采用分批处理每批次多少根据自身数据库的环境设置 看了公司的一个数据库的一个表,单表占用了190G,你这个表100多T,估计这1个表估计就得几十个T吧,这么大的表,应该采用分区表技术,如果是这样,可以现在某个分区内去重,然后再总的去重 100多T啊,我觉得Oracle很难担得起,备份估计是别想了。不过如果去重的话,仅靠几条SQL是不行的,可能需要新建个表把关键列分段提取出来以减少尺寸,必要的时候可以可以用哈希算法把关键列的组合哈希一下。然后可以考虑用bloom filter算法把数据作粗过滤排除掉绝大部分不重复的数据,然后对可能重复的数据再作一次过滤。 数据量确实非常大,至于是哪里的数据库不太好回复,请大家还是更关注问题本身吧。有没有可能考虑将数据库导出至hdfs,采用hadoop处理呢,分区也考虑过,可是这么大的数据库,分区也不是说分就分的,实际操作起来还是非常复杂,其可用性也待考究。 说一下我的想法吧,也不一定是最好的方案1、先将现有数据划分为N个分区 如果此表为分区表,可直接利用分区表的分区划分 不是分区表的话建议按照rowid进行分区,按rowid检索的速度应该是最快的2、先将每个分区分别自己内部去重3、然后两两组合去重 1和2、1和3、1和4……1和N 2和3、2和4、2和5……2和N …… N-1和N至于应该划分多少个分区,不好说,看情况吧,一点点测试吧这么大的数据量修改结构或是增加索引都不太现实,只能利用现有状况进行处理,确实让人头大 嗯,确实如此,谢谢解答,分区 去重 再 merge的方法确实是现在为数不多的方案之一 非Oracle的方法: 分配 1G的内存,每一个bit代表一个ID[需要用算法将ID映射到0-100亿的整数空间]。 从数据库读取ID,填冲到内存对应位上,如果是 0-1 ,那么是正常,如果是1-1,那么ID重复,输出到计数程序或文件。 数据读取完成后,检查整个空间,值为0的bit位,是缺失的ID。 逻辑简单,可以做成分布式程序,快速计算。 你的意思是放着oracle的快速检索功能不用,自己检索? 你的意思是放着oracle的快速检索功能不用,自己检索?B+数的检索效率并没有达到理想化的程度,并不适合做楼主要求的事情。 这个表的索引肯定在100G以上,能够把索引文件遍历一遍,负担就相当大了。 用27楼的算法,可以在遍历一遍索引不进行任何数值比较(位上的比较还是有的)的情况下得到结果。 效率不能再高了。 如果数据量超过200亿条,就须要建立分区逻辑,和22楼的思想类似,在多台机器上跑,然后归并。[就是hadoop的思想哈] sql求助,请各位援手…… 开发中遇到一个棘手的问题,在线急求! 效率问题 orcale时间的处理 存储过程中表名的问题 这样的查询语句怎么写? 菜鸟(初学者)高分求助,进者有分,不够再加 我把oracle9i卸了就安装不上了 date取出时候通常为2000/04/05式样,如何能成为2000/4/5式样 有关外连接 select 很快,count、update很慢可能是什么原因呀 求解连表查询
毕竟在数据检索方面,我们都没有oracle专业
数据量较大,删除时可以考虑采用分批处理
每批次多少根据自身数据库的环境设置
不过如果去重的话,仅靠几条SQL是不行的,可能需要新建个表把关键列分段提取出来以减少尺寸,必要的时候可以可以用哈希算法把关键列的组合哈希一下。然后可以考虑用bloom filter算法把数据作粗过滤排除掉绝大部分不重复的数据,然后对可能重复的数据再作一次过滤。
1、先将现有数据划分为N个分区
如果此表为分区表,可直接利用分区表的分区划分
不是分区表的话建议按照rowid进行分区,按rowid检索的速度应该是最快的
2、先将每个分区分别自己内部去重
3、然后两两组合去重
1和2、1和3、1和4……1和N
2和3、2和4、2和5……2和N
……
N-1和N至于应该划分多少个分区,不好说,看情况吧,一点点测试吧这么大的数据量修改结构或是增加索引都不太现实,只能利用现有状况进行处理,确实让人头大
嗯,确实如此,谢谢解答,分区 去重 再 merge的方法确实是现在为数不多的方案之一
逻辑简单,可以做成分布式程序,快速计算。
如果数据量超过200亿条,就须要建立分区逻辑,和22楼的思想类似,在多台机器上跑,然后归并。[就是hadoop的思想哈]