Как запросить Cassandra с определенного узла и получить данные только от этого узла? - PullRequest
0 голосов
/ 22 мая 2018

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

1 Ответ

0 голосов
/ 22 мая 2018

Используйте WhiteListRoundRobinPolicy и CL.ONE, как указано в другом вопросе.

Вы также можете расширить оператор, включив в него хост и настраиваемую политику балансировки нагрузки, чтобы отправить запрос вХост в обертке.Расширение политики и переопределение make_query_plan, что-то вроде (непроверенный просто, рассмотрите следующий псевдокод)

class StatementSingleHostRouting(DCAwareRoundRobinPolicy):
  def make_query_plan(self, working_keyspace=None, query=None):
    if query.host:
      return [query.host]
    return DCAwareRoundRobinPolicy.make_query_plan(self, working_keyspace, query)

Если этот хост не владеет данными, он все равно будет запрашивать другие реплики.

...