有这样一个需求
1T 文件,行存储
只有一台 128M,64M,256G
要求计算重复行。
做法:
参考hashmap的数据结构,有这种做法.仅仅是思路
每次读取一行数据,对它取哈希模上一个值,比如 i.hashCode()%2000,用2000个小文件分开存储1T文件的内容,这样保证了相同内容的行数据肯定落在同一个小文件中,再根据hashset的不可重复特点,找出重复行。这样只有两次1T文件的io读取。
还有一种需求是排序,
每次读取一行数据,如果在0-100形成一个文件,101-200形成一个小文件以此类推,这些小文件特点是外部有序,内部无序,每次读取小文件进行排序后放在一个大文件中,最终形成的大文件就是完全有顺序的。
还有一种做法是每次取500M文件或者说每次读200行,读取文件然后排序形成一个小文件,这些小文件的特点是内部有序,外部无序,可以用归并排序的方法读取小文件给所有小文件内容从小到大依次排序。这样只有两次1T文件的io读取
这两种做法其实都是采取了分治的思想,把内容分开形成多个小内容或者小文件再处理每个小文件。