Ejemplo n.º 1
0
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))
}