我正在使用Hector为Cassandra开发一种机制。 我现在需要的是知道哪些是用于查看存储哪个节点的键的哈希值(查看每个节点的标记),并直接询问该节点的值。我理解的是,根据Cassandra使用的分区器,这些值独立于一个分区存储到另一个分区。那么,是否存储在任何表中的所有键的哈希值?如果没有,我怎么能实现一个泛型类,一旦我从System Keyspace读取使用Cassandra的分区器这个类可能是它的一个实例,而不需要根据分区器修改代码?我需要它来调用getToken方法来计算给定键的哈希值。
答案 0 :(得分:2)
Hector的CqlQuery支持不足和错误。您应该使用本机Java CQL驱动程序:https://github.com/datastax/java-driver
答案 1 :(得分:1)
你可以重用Cassandra中定义的分区器:https://github.com/apache/cassandra/tree/trunk/src/java/org/apache/cassandra/dht然后使用你可以进行路由的令牌范围。
答案 2 :(得分:1)
CQL driver提供开箱即用的令牌感知路由。我会使用它而不是试图重新发明Hector的轮子,特别是因为Hector使用传统的Thrift API而不是CQL。
答案 3 :(得分:0)
最后,在测试了不同的实现之后,我找到了使用下一个代码获取分区程序的方法:
CqlQuery<String, String, String> cqlQuery = new CqlQuery<String, String, String>(
ksp, StringSerializer.get(), StringSerializer.get(), StringSerializer.get());
cqlQuery.setQuery("select partitioner from local");
QueryResult<CqlRows<String, String, String>> result = cqlQuery.execute();
CqlRows rows = result.get();
for (int i = 0; i < rows.getCount(); i++) {
RowImpl<String, String, String> row = (RowImpl<String, String, String>) rows
.getList().get(i);
List<HColumn<String, String>> column = row.getColumnSlice().getColumns();
for (HColumn<String , String> c: column) {
System.out.println(c.getValue());
}
}