我理解text和varchar是别名,它们用于存储UTF-8字符串。
那么对于ASCII呢,在文档中写着“US-ASCII字符串”?除了编码之外还有什么区别呢?
在存储大型字符串(~ 500KB)时,是否存在大小差异?这两者之间有哪种更好的选择?
在存储大型字符串(~ 500KB)时,是否存在大小差异?这两者之间有哪种更好的选择?
关于这个答案:
如果数据是一段文本,例如在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”。