Расположение узла раздела cassandra

Я использую базу данных Cassandra с драйвером datastax. Мне нужно выполнить пакетное чтение из Cassandra чего-то порядка 2000 строк. Мой вариант использования такой: я получаю список идентификаторов в своем запросе, и эти идентификаторы являются моими ключами разделения в Cassandra. Я хочу знать, стоит ли создавать 2000 потоков и получать данные из Cassandra параллельно (в этом случае чтение данных будет эффективным, поскольку они поступают только к одному узлу) или можно найти способ группировать идентификаторы, которые жить в том же узле, чтобы я мог оптимизировать чтение (теперь в этом случае мне нужно создавать гораздо меньше потоков и меньше накладных расходов на Cassandra). Пожалуйста, дайте мне знать, могу ли я добиться эффективного пакетного чтения, кроме создания нескольких потоков. Спасибо! PS: Данные, возвращаемые Cassandra, не настолько велики, чтобы вызывать OOM.


person User5817351    schedule 18.12.2016    source источник


Ответы (1)


можно ли найти способ сгруппировать идентификаторы, которые живут в одном узле

Да, вы можете получить диапазоны токенов для кластера cassandra и проверить появление токенов для ваших идентификаторов в диапазонах, а затем сгруппировать идентификаторы по узлам.

В дополнение:

Нет необходимости создавать много потоков, драйвер datastax предоставляет асинхронный API, мы используем его в нашем проекте для параллельного выполнения большого количества запросов, и он работает достаточно хорошо, но не превосходно с точки зрения производительности.

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

Обновлено:

Я полагаю, вы можете использовать метод Metadata.newToken для вычисления токена на стороне драйвера или прямого получения реплик с помощью Metadata.getReplicas для данного ключа раздела. Но перед этим сериализовать ключ раздела в соответствии с его типом и версией протокола.

person Mikhail Baksheev    schedule 19.12.2016
comment
Спасибо, что помогло! Знаете ли вы, как я могу рассчитать токен для данного ключа разделения с помощью драйвера dataStax. В настоящее время я делаю что-то вроде select token(key) from demotable where key=1231, чтобы определить значение токена для данного ключа разделения. И я думаю, что делать это плохо, так как снова много раз идет на сервер Cassandra. Я думаю, что должен быть способ получить правильный алгоритм хеширования через data stax, который выполняет свою работу. - person User5817351; 18.01.2017
comment
@Coder, я обновил свой ответ, чтобы узнать подробности о расчете токена на стороне водителя. - person Mikhail Baksheev; 23.01.2017