Проверка работоспособности соединения Cassandra (с использованием Гектора)?

Для мониторинга операций моего приложения я ищу что-то похожее на часто используемый запрос «Проверка соединения SQL».

ВЫБЕРИТЕ 1;

в Кассандре, используя драйвер Гектора. Я пробовал такие вещи, как просмотр Cluster.getKnownPoolHosts() и .getConnectionManager().getActivePools(). Но кажется, что их статус не обновляется постоянно, только когда я действительно пытаюсь получить доступ к Cassandra с запросом.

Я бы хотел, чтобы моя проверка работоспособности не зависела от каких-либо пространств ключей или пользовательских CF, которые должны существовать, поэтому простой запуск «фиктивного» запроса кажется сложным (против чего?). И, конечно же, это не должно занимать много памяти или генерировать значительную нагрузку.

Могу ли я заставить Гектора каким-то образом обновить статус пула соединений без выполнения реального запроса?

(Кстати: CQL даже не принимает «SELECT 1» как допустимый запрос.)


person HansMari    schedule 20.04.2012    source источник
comment
вы нашли ответ на это? я пытаюсь сделать то же самое   -  person Pablo Fernandez    schedule 10.04.2013
comment
Да, я нашел подход, который, кажется, хорошо работает для меня. Смотрите ответ ниже.   -  person HansMari    schedule 11.04.2013


Ответы (3)


С CQL3 я использую следующий запрос:

SELECT now() FROM system.local;

Было бы неплохо вообще избавиться от предложения FROM, чтобы сделать это общим, если у пользователя по какой-то причине нет доступа к пространству ключей system или семейству столбцов local. Но, как и в случае с другими ответами, по крайней мере, это не должно давать ложных срабатываний.

person Eemeli Kantola    schedule 03.12.2013
comment
Как на самом деле вы делаете эту проверку? Вы ловите какое-то исключение или исследуете объект QuerryResult? - person CAMOBAP; 17.12.2013
comment
Да, просто проверяя, что этот не выдает исключение. Можно также убедиться, что запрос действительно что-то возвращает, но я счел это ненужным. - person Eemeli Kantola; 13.01.2014
comment
у нас есть лучшее решение для этого, потому что это очень старые комментарии - person Vimit Dhawan; 07.08.2020
comment
Этот запрос возвращает отметку времени, которую я не смог преобразовать ни в какой тип Java. Альтернативный запрос, который работает для меня и возвращает строку, это SELECT release_version FROM system.local; - person Abhijit Sarkar; 01.09.2020

Решение, которое я использую в настоящее время и которое на данный момент кажется наиболее надежным (протестировано с Cassandra 1.1 и 1.2), представляет собой простой запрос к «системе»:

Query<String> query = Query.selectQuery("*", "system", null, 1, consistencyLevel, StringSerializer.get());

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

person HansMari    schedule 11.04.2013
comment
Я могу ошибаться, но я думаю, что этот подход всегда будет вызывать один и тот же узел (узлы) - в зависимости от уровня консистентности вы всегда будете вызывать 1, Q или все узлы вашего RF. Если вы хотите отслеживать, активно ли соединение, вы можете это сделать, если вы хотите отслеживать состояние кольца, я бы использовал nodetool внутри вашего java-приложения. - person Carlo Bertuccini; 11.04.2013
comment
Это предназначено для проверки соединения, а не для проверки работы кластера Cassandra. - person HansMari; 12.04.2013
comment
@HansMari, как на самом деле вы делаете эту проверку? Вы проверяете некоторые свойства запроса? - person CAMOBAP; 17.12.2013
comment
Если запрос работает нормально, соединение установлено. Фактические результаты запроса не имеют значения. - person HansMari; 17.12.2013
comment
Поэтому, если нет исключений, мы думаем, что соединение установлено. правильный? - person CAMOBAP; 10.01.2014
comment
@HansMari, как это выглядит в реальном запросе cql? - person xbeta; 12.07.2014

Запрос Эмели Кантолы возвращает отметку времени, которую мне не удалось преобразовать в какой-либо тип Java. Альтернативный запрос, который работает для меня и возвращает строку, это SELECT release_version FROM system.local;

person Abhijit Sarkar    schedule 01.09.2020