これはコンシステントハッシュ法に関連しており、私は概念的に何をする必要があるかを理解していますが、これをコードに変換するのに苦労しています。
特定のキースペース(たとえば、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;
}