在有大量数据需要处理(比如取最大值),且内存有限的情况下,按照如下处理:
- 流式读取数据
- 将数据进行hash分治,分开存储到多个文件中
- 计算每个文件中数据的最大值,最后归并计算所有文件,取得最终的最大值
import (
"fmt"
"hash/crc32"
)
// 分治方法demo
func HashDivide() {
data := []string{
"111",
"222",
"333",
"444",
"555",
"666",
"777",
"888",
"999",
}
var n = 5
divides := make([][]string, n)
for _, v := range data {
hv := crc32.ChecksumIEEE([]byte(v))
idx := int(hv) % n
divides[idx] = append(divides[idx], v)
}
fmt.Println(divides)
}