对于我的应用程序的操作监视,我正在寻找类似于常用的“SQL连接验证”查询的东西
SELECT 1;
在Cassandra中,使用Hector驱动程序。我尝试过像Cluster.getKnownPoolHosts()和.getConnectionManager()。getActivePools()这样的事情。但是,只有当我真正尝试通过查询访问Cassandra时,它们的状态似乎才会不断更新。
我希望我的运行状况检查独立于需要存在的任何键空间或用户CF,因此运行“虚拟”查询似乎很困难(针对什么?)。当然,它不应占用大量内存或产生任何重大负载。
我可以以某种方式强制Hector更新其连接池状态而不运行真正的查询吗?
(顺便说一句:CQL甚至不接受“SELECT 1”作为有效查询。)
答案 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;