使用 TEXT 作为主键时是否有任何性能损失?

Are there any performance penalties when using a TEXT as a Primary Key?

如果是,如果我想要一个唯一的 TEXT 字段,数据模型会是什么样子?

没有。无论使用何种数据类型,Cassandra 都将所有数据(包括主键值)存储为十六进制字节数组。在性能方面,主键的数据类型真的无关紧要。

唯一重要的情况是 token/node 分布。这是因为为 "12345" 作为文本生成的令牌将不同于为 12345 作为 bigint 生成的令牌:

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

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

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

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

(1 rows)

但即使在这个例子中,一个人也不应该比另一个人表现 faster/different。