有人知道Cassandra中的两种CQL数据类型text
和varchar
之间有什么区别吗?Cassandra文档将这两种类型都描述为“UTF-8编码的字符串”,没有更多的说明。
有人知道Cassandra中的两种CQL数据类型text
和varchar
之间有什么区别吗?Cassandra文档将这两种类型都描述为“UTF-8编码的字符串”,没有更多的说明。
text
只是varchar
的别名!
文档:
编辑
这里是链接到C* 1.2文档. text vs varchar信息仍然相同,但该文档包含一些额外的数据类型。
编辑 v2 文档链接已更新为C* 3的文档。我找不到一个好的C* 1.2文档的替代品。
如果不是的话,请忽略我的回答,也许你是指CQL存储类型。
CQL一直在试图与Cassandra的内部机制保持距离。这是好事还是坏事,意见不一。然而,最新版本的CQL具有更加熟悉于DBA的语法。
如果您查看此SO问题,将会对此情况有一个很好的说明: 使用Datastax API(使用新的Binary protocol)创建Cassandra列族或表
在最近的CQL版本中,一些对于Cassandra来说陌生的别名已经开始出现。例如,Cassandra原生的ColumnFamily已被重命名为Table,而text只是varchar的一个别名,反之亦然。同样,这是一个关于好坏的主观判断。
因此,你可以互换地使用varchar和text。
当我初次接触Cassandra时,这也曾让我感到困惑。
文本和varchar都是UTF8编码的字符串,并且是彼此的同义词,即它们完全相同。
另外需要注意一下的是,如果一个人来自关系型数据库(如MS SQL)的领域,他可能会不愿意使用这些类型(尤其是TEXT)作为实体的主键字段。通常情况下,TEXT通常与大块文本内容相关联,而这不符合第三范式规则下的关系型思维方式中主键字段的标准。但由于所有Cassandra类型本质上都是以十六进制字节数组的形式存储在磁盘上的,因此将它们用作主键时并没有真正显著的性能损失。