14

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

选择 1;

在 Cassandra 中,使用 Hector 驱动程序。我尝试过查看 Cluster.getKnownPoolHosts() 和 .getConnectionManager().getActivePools() 之类的方法。但似乎它们的状态并没有持续更新,只有当我实际尝试通过查询访问 Cassandra 时。

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

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

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

4

3 回答 3

18

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

SELECT now() FROM system.local;

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

于 2013-12-03T12:00:47.230 回答
4

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

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

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

于 2013-04-11T05:40:52.357 回答
0

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

于 2020-09-01T04:23:27.897 回答