Какой алгоритм стоит за функцией токена Кассандры? - PullRequest
0 голосов
/ 29 сентября 2018

Функция токена в моем драйвере не поддерживает составной ключ раздела, но он очень хорошо работает с одним ключом раздела, он принимает двоичный файл в 8-битной форме в качестве входных данных и передает его хэш-функции murmur3 и извлекает64-подписано-маленькое целое число (Token) из результата murmur3 и игнорирует любой дополнительный двоичный буфер.

Так что я надеюсь создать двоичный файл для составного ключа раздела и затем передать его в murmur3, как обычно, алгоритм или побитовые операции будут действительно полезны или, по крайней мере, источником на любом языке программирования.

Я не имею в виду часть murmur3, только сторону токена, которая преобразует / смешивает ключ составного раздела и выводит необработанные байты в двоичном виде.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Наконец-то я нашел решение своего вопроса: Алгоритм вычисления токена для составного ключа раздела: Primary_key ((text, int)) -> поэтому ключ разделения - составной_часть_ключа (text, int).

Пример: строка с Composite_partition_key ('hello', 1)

Применение алгоритма:

1 - расположение компонентов ключа составного раздела в большомпредставление с прямым порядком (16 бит):

first_component = 'hello' -> 68 65 6c 6c 6f

sec_component = 1 -> 00 00 00 01

6865 6c 6c 6f 00 00 00 01

2 - добавить длину компонента в два байта перед каждым компонентом

first_component = 'hello', длина = 5-> 00 05 68 65 6c 6c 6f

sec_component = 1, поэтому длина = 4 -> 00 04 00 0000 01

00 05 68 65 6c 6c 6f 00 04 00 00 00 01

3 - добавить нулевое значение послекаждый компонент

first_component = 'hello' -> 00 05 68 65 6c 6c 6f 00

sec_component = 1 -> 00 04 00 00 00 01 00

4- результат

00 05 68 65 6c 6c 6f 00 00 04 00 00 0001 00

теперь передают результат в виде любой двоичной базы, которую понимает ваша функция murmur3 (убедитесь, что это вариант cassandra).

0 голосов
/ 29 сентября 2018

Посмотрите на водителей, так как они сгенерировали токен, чтобы найти правильного координатора.https://github.com/datastax/java-driver/blob/8be7570a3c7fbba773ae2581bbf26e8196e7d6fb/driver-core/src/main/java/com/datastax/driver/core/Token.java#L112

Это немного отличается от типичного ропота 3 из-за ошибки, когда он был сделан, и невозможности изменить его, не нарушая существующие кластеры.Поэтому я бы рекомендовал скопировать его с них или, что еще лучше, использовать существующие драйверы для поиска токена.

...