Кассандра = память / кодировка-след ключей (хэш / байт [] => шестнадцатеричный => UTF16 => байт []) - PullRequest
5 голосов
/ 13 мая 2011

Я пытаюсь понять последствия использования MD5 Hash в качестве ключа Cassandra с точки зрения «потребления памяти / хранилища»:

  1. MD5 Хэш моего контента (в Java) = byte [] имеет длину 16 байт. (16 байтов из Википедии для универсального md5, я не уверен, что реализации java также вернут 16 байтов)
  2. Шестнадцатеричный кодирует это значение, чтобы иметь возможность напечатать его в удобочитаемом формате => 1 байт становится 2-хзначным значением
  3. Я должен представить каждое шестнадцатеричное значение как «символ» в java => result = «двухзначные значения символов» (например, «FF» - это строка длины / размера = 2.)
  4. Java использует UTF-16 =>, поэтому каждый «строковый символ» кодируется двумя байтами. «FF» потребует 2x2 байта?
  5. Заключение => Хэш MD5 в байтовом формате имеет размер 16 байт, но в виде строки с шестнадцатеричным Java-кодом utf16 потребляет 16x2x2 = 64 байт (в памяти)!?!? Это правильно?

Каково потребление памяти в Кассандре, если использовать его в качестве ключа строки?

Если бы я непосредственно использовал байтовый массив из хэш-функции, я бы предположил, что он потребляет 16 байтов в Кассандре?

Но если я использую шестнадцатеричное представление (как отмечено выше), может ли кассандра "сжать" его до 16 байтов или он также займет 64 байта в кассандре? Я предполагаю, что 64 байта в Кассандре, это правильно?

Какие ключи вы используете? Используете ли вы непосредственно выход хеш-функции или сначала кодируете в шестнадцатеричную строку, а затем используете строку? (В MySQL я всегда всякий раз, когда использовал хеш-ключ, использовал его представление в виде шестнадцатеричной строки ... Таким образом, он доступен для чтения непосредственно в MySQL Tools и во всем приложении. Но теперь я понимаю, что это пустая трата памяти ?? ?)

Может быть, мое мышление совершенно неверно, тогда было бы любезно объяснить, где я не прав.

Огромное спасибо! Jens

1 Ответ

2 голосов
/ 13 мая 2011

Правильно в обоих случаях: byte [] будет 16 байтов, utf16-as-hex будет 64.

В 0.8 у Cassandra есть ключевые метаданные, поэтому вы можете сказать ему, что «этот ключ является байтом []», и он будет отображаться в шестнадцатеричном виде в клипе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...