2

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

ответ

1

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

Да, вы можете get Token Ranges для Кассандры кластера и check occurrence for tokens для вас идентификаторами в диапазоне, а затем группа идентификаторы узлов.

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

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

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

Обновлено:

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

+0

Спасибо, что помогли! Вы знаете, как я могу вычислить токен для данного ключа секционирования с помощью драйвера dataStax. В настоящее время я делаю что-то вроде 'select token (key) из demotable, где key = 1231', чтобы определить значение токена для данного ключа секционирования. И я думаю, что делать это плохо, так как снова это происходит на сервере Cassandra много раз. Я думаю, что должен быть способ получить правильный алгоритм хэширования, открытый через данные stax, которые получают работу. – Coder

+0

@Coder, я обновил свой ответ для получения подробной информации о вычислении токенов на стороне драйвера –

Смежные вопросы