Я пытаюсь понять последствия использования MD5 Hash в качестве ключа Cassandra с точки зрения «потребления памяти / хранилища»:
- MD5 Хэш моего контента (в Java) = byte [] имеет длину 16 байт. (16 байтов из Википедии для универсального md5, я не уверен, что реализации java также вернут 16 байтов)
- Шестнадцатеричный кодирует это значение, чтобы иметь возможность напечатать его в удобочитаемом формате => 1 байт становится 2-хзначным значением
- Я должен представить каждое шестнадцатеричное значение как «символ» в java => result = «двухзначные значения символов» (например, «FF» - это строка длины / размера = 2.)
- Java использует UTF-16 =>, поэтому каждый «строковый символ» кодируется двумя байтами. «FF» потребует 2x2 байта?
- Заключение => Хэш MD5 в байтовом формате имеет размер 16 байт, но в виде строки с шестнадцатеричным Java-кодом utf16 потребляет 16x2x2 = 64 байт (в памяти)!?!? Это правильно?
Каково потребление памяти в Кассандре, если использовать его в качестве ключа строки?
Если бы я непосредственно использовал байтовый массив из хэш-функции, я бы предположил, что он потребляет 16 байтов в Кассандре?
Но если я использую шестнадцатеричное представление (как отмечено выше), может ли кассандра "сжать" его до 16 байтов или он также займет 64 байта в кассандре? Я предполагаю, что 64 байта в Кассандре, это правильно?
Какие ключи вы используете? Используете ли вы непосредственно выход хеш-функции или сначала кодируете в шестнадцатеричную строку, а затем используете строку?
(В MySQL я всегда всякий раз, когда использовал хеш-ключ, использовал его представление в виде шестнадцатеричной строки ... Таким образом, он доступен для чтения непосредственно в MySQL Tools и во всем приложении. Но теперь я понимаю, что это пустая трата памяти ?? ?)
Может быть, мое мышление совершенно неверно, тогда было бы любезно объяснить, где я не прав.
Огромное спасибо!
Jens