Cassandra连接的健康检查(使用hector)?

时间:2012-04-20 12:31:10

标签: cassandra hector

对于我的应用程序的操作监视,我正在寻找类似于常用的“SQL连接验证”查询的东西

  

SELECT 1;

在Cassandra中,使用Hector驱动程序。我尝试过像Cluster.getKnownPoolHosts()和.getConnectionManager()。getActivePools()这样的事情。但是,只有当我真正尝试通过查询访问Cassandra时,它们的状态似乎才会不断更新。

我希望我的运行状况检查独立于需要存在的任何键空间或用户CF,因此运行“虚拟”查询似乎很困难(针对什么?)。当然,它不应占用大量内存或产生任何重大负载。

我可以以某种方式强制Hector更新其连接池状态而不运行真正的查询吗?

(顺便说一句:CQL甚至不接受“SELECT 1”作为有效查询。)

3 个答案:

答案 0 :(得分:14)

使用CQL3,我使用以下查询:

SELECT now() FROM system.local;

如果用户由于某种原因无法访问system键空间或local列族,那么摆脱FROM子句altogther以使其成为通用的将是很好的。但与其他答案一样,至少这不应该给出误报。

答案 1 :(得分:4)

我目前使用的解决方案,到目前为止似乎是最强大的(使用Cassandra 1.1和1.2测试)是对“系统”的简单查询:

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

这不是我想要的,因为它是一个“真正的”查询,但另一方面它并没有给出任何误报。

答案 2 :(得分:0)

Eemeli Kantola's query返回一个时间戳,我无法将其转换为任何Java类型。适用于我并返回字符串的替代查询是SELECT release_version FROM system.local;