Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Cassandra=密钥的内存/编码占用(哈希/字节[]=>;十六进制=>;UTF16=>;字节[])_Java_Memory_Encoding_Hash_Cassandra - Fatal编程技术网

Java Cassandra=密钥的内存/编码占用(哈希/字节[]=>;十六进制=>;UTF16=>;字节[])

Java Cassandra=密钥的内存/编码占用(哈希/字节[]=>;十六进制=>;UTF16=>;字节[]),java,memory,encoding,hash,cassandra,Java,Memory,Encoding,Hash,Cassandra,我试图理解使用MD5哈希作为Cassandra密钥在“内存/存储消耗”方面的含义: 我的内容的MD5哈希(Java)=字节[]是16字节长。(16字节来自wikipedia的通用md5,如果java实现也返回16字节,我不是舒尔) 十六进制编码此值,以便能够以人类可读的格式打印=>1字节变为2十六进制值 我必须在java=>result=“两个字符串字符值”中将每个十六进制值表示为一个“字符”(例如,“FF”是一个长度/size=2的字符串) Java使用UTF-16=>所以每个“字符串”都用两

我试图理解使用MD5哈希作为Cassandra密钥在“内存/存储消耗”方面的含义:

  • 我的内容的MD5哈希(Java)=字节[]是16字节长。(16字节来自wikipedia的通用md5,如果java实现也返回16字节,我不是舒尔)
  • 十六进制编码此值,以便能够以人类可读的格式打印=>1字节变为2十六进制值
  • 我必须在java=>result=“两个字符串字符值”中将每个十六进制值表示为一个“字符”(例如,“FF”是一个长度/size=2的字符串)
  • Java使用UTF-16=>所以每个“字符串”都用两个字节编码。“FF”需要2x2字节
  • 结论=>字节格式的MD5哈希为16字节,但表示为java十六进制utf16字符串会消耗16x2x2=64字节(内存中)!?!?这是正确的吗
  • 在Cassandra中,将其用作行键的存储消耗是多少

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

    但是如果我使用十六进制字符串表示法(如上所述),cassandra是否可以将其“压缩”为16字节,或者cassandra是否也需要64字节?我假设Cassandra中有64个字节,对吗

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

    也许我的想法是完全错误的,那么最好能解释一下我错在哪里

    非常感谢!
    jens在两个计数上都是正确的:字节[]将是16字节,utf16作为十六进制将是64字节

    在0.8中,Cassandra具有密钥元数据,因此您可以告诉它“此密钥是一个字节[]”,并在cli中以十六进制显示