大量数据hash分治方法(demo)

242 阅读1分钟

在有大量数据需要处理(比如取最大值),且内存有限的情况下,按照如下处理:

  1. 流式读取数据
  2. 将数据进行hash分治,分开存储到多个文件中
  3. 计算每个文件中数据的最大值,最后归并计算所有文件,取得最终的最大值
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)

}