来自Cassandra键的哈希值

时间:2013-11-12 21:43:46

标签: hash cassandra key hector partitioner

我正在使用Hector为Cassandra开发一种机制。 我现在需要的是知道哪些是用于查看存储哪个节点的键的哈希值(查看每个节点的标记),并直接询问该节点的值。我理解的是,根据Cassandra使用的分区器,这些值独立于一个分区存储到另一个分区。那么,是否存储在任何表中的所有键的哈希值?如果没有,我怎么能实现一个泛型类,一旦我从System Keyspace读取使用Cassandra的分区器这个类可能是它的一个实例,而不需要根据分区器修改代码?我需要它来调用getToken方法来计算给定键的哈希值。

4 个答案:

答案 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());
            }

    }