Cassandra = 键的内存/编码占用量 (哈希/字节数组[]=>十六进制=>UTF16=>字节数组[])

5
我正在尝试了解使用MD5哈希作为Cassandra Key的影响,就“内存/存储消耗”而言:
  1. 我的内容的MD5哈希(在Java中)= byte[]长度为16字节。 (16个字节来自维基百科的通用md5,我不确定java实现是否也返回16个字节)
  2. 将此值转换为十六进制编码,以便能够以人类可读的格式打印 => 1个字节变为2个十六进制值
  3. 我必须将每个十六进制值表示为Java中的“字符” =>结果=“两个字符串字符值”(例如,“FF”是长度/大小=2的字符串。)
  4. Java使用UTF-16 =>因此,每个“字符串字符”都使用两个字节进行编码。“FF”需要2x2个字节?
  5. 结论 =>以字节格式表示的MD5哈希为16个字节,但在Java十六进制utf16字符串中表示为64个字节(在内存中)!?!这正确吗?

如果将其用作行键,在Cassandra中的存储消耗是多少?

如果我直接使用哈希函数的字节数组,则会认为它在Cassandra中消耗16个字节?

但是,如果我使用十六进制字符串表示形式(如上所述),Cassandra是否可以将其“压缩”为16个字节,还是在Cassandra中也需要64个字节?我假设Cassandra中为64个字节,这正确吗?

您使用什么类型的键?您直接使用哈希函数的输出还是先编码为十六进制字符串,然后再使用该字符串?(在MySQL中,每当我使用哈希键时,我都使用其十六进制字符串表示形式...因此它在MySQL工具和整个应用程序中都可以直接读取。但是我现在意识到它浪费了存储空间?)

也许我的想法完全不正确,那么请解释我错在哪里。

非常感谢! jens

1个回答

2

两者都是正确的:byte[]将是16个字节,utf16-as-hex将是64个字节。

在0.8版本中,Cassandra具有关键元数据,因此您可以告诉它“这个键是byte[]”,它将在cli中以十六进制显示。


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