Cassandra:文本 vs varchar

74

有人知道Cassandra中的两种CQL数据类型textvarchar之间有什么区别吗?Cassandra文档将这两种类型都描述为“UTF-8编码的字符串”,没有更多的说明。


你能提供文档链接吗?我从未听说过这两个。然而,我听说过AsciiType和UTF8Type,它们之间的区别应该是不言自明的。 - Nikola Yovchev
@baba 这些是CQL3使用的名称。 - Raedwald
是的,我花了一些时间,但我想通了 :) - Nikola Yovchev
文档链接:http://docs.datastax.com/en/cql/3.3/cql/cql_reference/cql_data_types_c.html - Denilson Sá Maia
5个回答

90

2
你能提供一下你找到TEXT是VARCHAR的别名的来源吗?我在给出的链接中找不到相关内容。 - analogue
Ctrl + F 寻找 "alias" 并不能得到您想要的答案。请在 CQL3 文档 - Apache 链接中搜索“有关本机数据类型的信息”,您将看到 varchar 和 text 的描述,它们是相同的。此外,请参考此链接:http://www.thefreedictionary.com/Aliases - Lyuben Todorov
@analogue 在 关于数据类型 中提到,内部的 UTF8Type 与 CQL 名称 text、varchar 匹配,我理解为它们是别名。 - karmakaze
您所有的链接现在都导向 404 页面,除了 Documentation on Datatypes in CQL - Datastax 这个链接,它现在重定向到 Datastax 的 landing page - Marko
1
@Marko 感谢您指出这一点,很难跟上。我已经更新了链接,尽管我找不到一个好的替代品来提供有关数据类型的详细信息。 - Lyuben Todorov

13

如果不是的话,请忽略我的回答,也许你是指CQL存储类型。

CQL一直在试图与Cassandra的内部机制保持距离。这是好事还是坏事,意见不一。然而,最新版本的CQL具有更加熟悉于DBA的语法。

如果您查看此SO问题,将会对此情况有一个很好的说明: 使用Datastax API(使用新的Binary protocol)创建Cassandra列族或表

在最近的CQL版本中,一些对于Cassandra来说陌生的别名已经开始出现。例如,Cassandra原生的ColumnFamily已被重命名为Table,而text只是varchar的一个别名,反之亦然。同样,这是一个关于好坏的主观判断。

因此,你可以互换地使用varchar和text。


5
卡桑德拉CQL数据类型textvarchar是彼此的同义词/别名。
  1. 与Varchar相关联的数据类型是blob(blob的最大理论大小为2 GB)
  2. text关联的数据类型是Varchar(意味着即使您使用了text,但Cassandra在内部也将其视为Varchar)
  3. blob类型的关联不会创建性能问题,因为Cassandra将数据存储在恒定的十六进制数字中。
  4. 由于Cassandra根据我们设计表格的方式使用主键(分区键、聚簇列)查询正确的坐标,因此读取速度更快。 enter image description here enter image description here

4

当我初次接触Cassandra时,这也曾让我感到困惑。

文本和varchar都是UTF8编码的字符串,并且是彼此的同义词,即它们完全相同。

另外需要注意一下的是,如果一个人来自关系型数据库(如MS SQL)的领域,他可能会不愿意使用这些类型(尤其是TEXT)作为实体的主键字段。通常情况下,TEXT通常与大块文本内容相关联,而这不符合第三范式规则下的关系型思维方式中主键字段的标准。但由于所有Cassandra类型本质上都是以十六进制字节数组的形式存储在磁盘上的,因此将它们用作主键时并没有真正显著的性能损失。


2
对于Cassandra而言,text和varchar都是UTF8编码的字符串,因此它们是完全相同的东西。 CQL数据类型

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接