这与一致性哈希有关,虽然我从概念上理解我需要做什么,但我很难将其转换为代码。
我正在尝试将给定的键空间(例如 128 位)划分为大小相等的分区。我想要每个分区的上限(最高键)。
基本上,我将如何完成这个?
#define KEYSPACE_BYTE_SIZE 16
#define KEYSPACE_BIT_SIZE (KEYSPACE_BYTE_SIZE * 8)
typedef struct _key
{
char byte[KEYSPACE_BYTE_SIZE];
} key;
key * partition_keyspace( int num_partitions )
{
key * partitions = malloc( sizeof(key) * num_partitions );
// ...
}
编辑:
我想另一种说法是:
for (i = 0; i < num_partitions; i++)
{
partitions[i] = ((2 ^ KEYSPACE_BIT_SIZE) / num_partitions) * i;
}
当然,问题是 2 ^ 128 是一个非常大的数字,并且不能包含在 C 中用于进行数学运算的任何单个整数变量中(因此是 char[16] 结构)。
我真的不想为此使用大量库(或任何库)。
编辑:
虽然,实际上我正在寻找的数字是:
for (i = 0; i < num_partitions; i++)
{
partitions[i] = (((2 ^ KEYSPACE_BIT_SIZE) / num_partitions) * (i + 1)) - 1;
}