func printAnalysis(hr *hashing.HashRing) { hash := hr.BucketsPerNode() keys := make([]string, 0) min := 0xFFFF max := 0 v := float64(0) average := float64(0xFFFF) / float64(hr.Len()) for k := range hash { keys = append(keys, k) } sort.Strings(keys) for _, k := range keys { fmt.Printf("Node %s:\t%d\n", k, hash[k]) if hash[k] > max { max = hash[k] } if hash[k] < min { min = hash[k] } v = v + math.Pow(float64(hash[k])-average, 2) } v = v / float64(hr.Len()) fmt.Printf("\nIdeal bucket count per server: %.2f\n", average) fmt.Printf("Spread: %d - %d = %d\n", max, min, max-min) fmt.Printf("Deviation: %.4f\n", math.Sqrt(v)) }