Cassandra:TEXT(VARCHAR)和ASCII之间的区别

10
我理解text和varchar是别名,它们用于存储UTF-8字符串。 那么对于ASCII呢,在文档中写着“US-ASCII字符串”?除了编码之外还有什么区别呢?
在存储大型字符串(~ 500KB)时,是否存在大小差异?这两者之间有哪种更好的选择?

请查看此答案:https://stackoverflow.com/questions/30958016/data-modeling-in-cassandra-with-columns-that-can-be-text-or-numbers - MD Ruhul Amin
1个回答

13

关于这个答案

如果数据是一段文本,例如在Java中的字符串,它在运行时采用UTF-16编码,但在Cassandra中以文本类型序列化时则使用UTF-8。UTF-16始终每个字符使用2个字节,有时使用4个字节,但UTF-8是空间有效的,并且根据字符可以是1、2、3或4个字节长。

这意味着为了进行编码/解码工作需要CPU工作,而且根据文本,例如158786464563,数据将使用12个字节存储。这意味着使用更多的空间和更多的IO。

请注意,Cassandra提供了ASCII类型,该类型遵循US-ASCII字符集,并始终使用每个字符1个字节。


两者之间是否有大小差异?

是的

当我存储大量字符串(〜500KB)时,这两者之间是否有一种首选?

是的

因为ASCII比UTF-8更空间有效,而UTF-8比UTF-16更空间有效。同样,所有事情都取决于您如何对这些数据进行序列化/编码/解码。有关更多信息,请查看此处“what-is-the-advantage-of-choosing-ascii-encoding-over-utf-8”。


我不同意ASCII比UTF-8更节省空间的说法。可以用ASCII编码的字符串在UTF-8中使用相同数量的字节。ASCII可编码符号在UTF-8中也是一个字节。 - egelev
@egelev 我在某种程度上同意你的观点。我猜你可能误解了重点:">UTF-8是空间高效的,但根据字符不同,它的大小可能为1、2、3或4个字节,而ASCII始终为1个字节。" - MD Ruhul Amin

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