0

Hector を使用して Cassandra のメカニズムを開発しています。現時点で必要なのは、キーのハッシュ値がどれであるかを知り、どのノードが格納されているかを調べ (それぞれのトークンを調べて)、このノードに値を直接問い合わせることです。私が理解したのは、Cassandra が使用するパーティショナーによっては、値がパーティショナーごとに個別に格納されるということです。では、すべてのキーのハッシュ値はどのテーブルに格納されているのでしょうか? そうでない場合、Cassandra を使用しているパーティショナーを System Keyspace から読み取ると、パーティショナーに応じてコードを変更する必要なく、このクラスのインスタンスになる汎用クラスをどのように実装できますか? 特定のキーのハッシュ値を計算するには、getToken メソッドを呼び出す必要があります。

4

4 に答える 4

2

Hector の CqlQuery はサポートが不十分で、バグがあります。代わりに、ネイティブ Java CQL ドライバーを使用する必要があります: https://github.com/datastax/java-driver

于 2013-11-14T15:45:36.557 に答える
1

Cassandra で定義されているパーティショナーを再利用できます: https://github.com/apache/cassandra/tree/trunk/src/java/org/apache/cassandra/dhtそしてトークン範囲を使用してルーティングを行うことができます。

于 2013-11-13T07:25:09.060 に答える
1

CQL ドライバーは、すぐに使えるトークン認識ルーティングを提供します。特に Hector はCQLの代わりに従来の Thrift API を使用しているため、Hector で車輪を再発明しようとする代わりにそれを使用します。

于 2013-11-14T15:50:22.513 に答える
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());
            }

    } 
于 2013-11-15T13:05:16.537 に答える