As I understand the num_tokens setting, it makes Cassandra do the following pseudocode when a new node is added:
for 1...num_tokens do
my_token = rand(0, 2^128-1)
next_token = min(tokens in cluster where token > my_token)
my_range = (my_token, next_token - 1)
Now the new node owns num_tokens chunks of keys that previously belonged to other nodes.
My point is, with 1 node in the cluster, the ring is divided into num_tokens ranges. With N nodes, the ring is divided into N*num_tokens. Correct? The docs do not make this clear for me.
And another point: the tokens are randomly chosen, so the ranges of keys are not uniform, although with enough nodes in the cluster there probably won't be any really large ranges. Correct?