Подтвердить что ты не робот

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

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

SELECT 1;

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

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

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

(BTW: CQL даже не принимает "SELECT 1" в качестве действительного запроса.)

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

SELECT now() FROM system.local;

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