使用TEXT作为主键时是否存在性能损失?

Par*_*ras 8 cql cassandra

如果是,如果我想拥有一个独特的TEXT字段,那么数据模型会是什么样子?

Aar*_*ron 8

无论使用何种数据类型,Cassandra都会将所有数据存储在磁盘上(包括主键值)作为十六进制字节数组.在性能方面,主键的数据类型确实无关紧要.

它唯一重要的情况是令牌/节点分配.这是因为"12345"作为文本生成的标记将12345与为bigint 生成的标记不同:

aploetz@cqlsh:stackoverflow> CREATE TABLE textaskey (key text PRIMARY KEY, value text);
aploetz@cqlsh:stackoverflow> CREATE TABLE longaskey (key bigint PRIMARY KEY, value text);
aploetz@cqlsh:stackoverflow> INSERT INTO textaskey (key, value) VALUES ('12345','12345');
aploetz@cqlsh:stackoverflow> INSERT INTO longaskey (key, value) VALUES (12345,'12345');
aploetz@cqlsh:stackoverflow> SELECT token(key),value FROM textaskey ;

 token(key)          | value
---------------------+-------
 2375712675693977547 | 12345

(1 rows)
aploetz@cqlsh:stackoverflow> SELECT token(key),value FROM longaskey;

 token(key)          | value
---------------------+-------
 3741197147323682197 | 12345

(1 rows)
Run Code Online (Sandbox Code Playgroud)

但即使在这个例子中,也不应该比另一个更快/更不同.