Hash 映射,分而治之¶
这里的 Hash映射
是指通过一种映射散列的方式,将海量数据均匀分布在对应的内存或更小的文件中
使用 hash 映射有个最重要的特点是: hash值相同的两个串不一定一样,但是两个一样的字符串hash值一定相等
。哈希函数如下:
int hash = 0;
for (int i=0;i<s.length();i++){
hash = (R*hash +s.charAt(i)%M);
}
大文件映射成多个小文件。具体操作是,比如要拆分到 100(M) 个文件:
- 对大文件中的每条记录求 hash 值,然后对 M 取余数,即
hash(R)%M
,结果为 K - 将记录 R 按结果 K 分配到第 K 个文件,从而完成数据拆分
这样,两条相同的记录肯定会被分配到同一个文件。