manzi

导航

单机实现1T大文件的计算

需求:文件大小1T,存储方式为行存储,其中有两行内容一致,但不确定行位置,需要找出相同两行数据;

要求:单机,内存不超过128M,不可能放下全量数据

 

解决方案一:

  不考虑时间成本,冒泡排序原理,逐行比较,读出第一行数据与后面每一行数据比较,没有相等则继续读取第二行再比较。。。。理论上是可以实现的,只是循环次数比较多,用时间成本换取了空间成本

方案二:分治法

  思想:把该大文件文件分类切割成若干个小文件分别存储,然后分别读取小文件再做比较

  步骤:

    1、1T=1024GB=1048576MB,如果把文件切割成100M大小,会有10486个文件

    2、按行读取内容,算出hashcode值(相同字符串hashcode一致),与10486模运算,一样的值放到同一个文件

    3、文件已经切割完毕,现在能肯定的是相同的两行在同一个小文件中,只需循环读取小文件内容作对比就行了

  这样,比方案一省时间,最多遍历两边整个数据就能找出结果。。。。

posted on 2019-04-29 18:52  manzi  阅读(300)  评论(0编辑  收藏  举报