私の Cassandra ColumnFamily は Murmur3Partitioner を使用し、複合パーティション キーを持っています。このパーティショナーを使用してトークンを作成しようとしましたが、このトークン ファクトリではロング値のみが許可されているようです。「token(partition_column1, partition_column2)」のようなものに対してこれらのハッシュを生成することは可能ですか?
5534 次
3 に答える
7
それはうまくいくはずです。実際、パーティション キーがコンポジットの場合、1 つの列だけのトークンを作成することはできません。複合キーを正しく定義しましたか?
cqlsh:testks> create table t1(k1 int, k2 text, v text, primary key((k1, k2)));
cqlsh:testks> insert into t1(k1, k2, v) values (1, 'key', 'value');
cqlsh:testks> select * from t1;
k1 | k2 | v
----+-----+-------
1 | key | value
(1 rows)
cqlsh:testks> select token(k1) from t1;
Bad Request: Invalid number of arguments in call to function token: 2 required but 1 provided
cqlsh:testks> select token(k2) from t1;
Bad Request: Invalid number of arguments in call to function token: 2 required but 1 provided
cqlsh:testks> select token(k1, k2) from t1;
token(k1, k2)
---------------------
8064425790465501062
(1 rows)
于 2014-04-07T16:45:20.527 に答える
1
これは、Datastax web で見つけたハッシュを計算するための式です。
(((2**64 / number_of_tokens) * i) - 2**63) for i in range(number_of_tokens)
このハッシュ関数は、パーティション キーの 64 ビット ハッシュ値を作成します。
したがって、ハッシュは-2^63から + 2^63-1 ( 2 の 63 乗)の範囲になります。
于 2018-09-07T17:00:33.753 に答える