如何解决Cassandra 和 thrift 协议中的“显示版本”
我想确保我可以不时从 Java 服务连接到数据库(例如 ping)。此 answer 建议使用 show version
。
我的 Java 服务正在使用 Cassandra thrift 客户端(已弃用),但我找不到如何执行此类查询的示例。
我有一个 client
类型的 org.apache.cassandra.thrift.Cassandra.Client
。
这些是我发现的类似方法:
System.out.println("describe_schema_versions: " + nativeClient.describe_schema_versions());
System.out.println("describe_version: " + nativeClient.describe_version());
System.out.println("describe_snitch: " + nativeClient.describe_snitch());
System.out.println("describe_cluster_name: " + nativeClient.describe_cluster_name());
System.out.println("describe_keyspaces: " + nativeClient.describe_keyspaces());
System.out.println("describe_partitioner: " + nativeClient.describe_partitioner());
System.out.println("describe_token_map: " + nativeClient.describe_token_map());
如何执行查询以获取这样的 Cassandra 服务器版本?
cqlsh> show version;
[cqlsh 3.1.8 | Cassandra 1.2.19 | CQL spec 3.0.5 | Thrift protocol 19.36.2]
或者是否有首选的替代查询作为“ping”?
解决方法
如果你只是想进行健康检查,我认为运行一个简单的查询是一个不错的选择。
SELECT now() FROM system.local
这里是关于 thrift 客户端如何运行查询的文档。
Cassandra.Client (apache-cassandra API) - Javadoc Extreme
值得注意的是,由于 Thrift 的整数格式,有些人很难使用 system.now()
。这主要是因为 system.local 是一个 cql3 表,而不是 Thrift 列族。
为此,这将返回一个字符串,这可能更容易处理:
aploetz@cqlsh> SELECT release_version FROM system.local;
release_version
-----------------
3.11.6
(1 rows)
或者通过 Cassandra CLI:
[default@system] get local['local']['release_version']
如果您愿意,也可以拉动 thrift_version
(这也是一个字符串)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。