Ich versuche zu verstehen, welche Auswirkungen die Verwendung eines MD5-Hash als Cassandra-Schlüssel in Bezug auf den "Speicherverbrauch" hat:
- MD5 Hash meines Inhalts (in Java) = byte[] ist 16 Bytes lang. (16 Bytes sind aus Wikipedia für generisches md5, ich bin mir nicht sicher, ob die Java-Implementierungen auch 16 Bytes zurückgeben)
- Dieser Wert wird hexadezimal kodiert, um ihn in einem für Menschen lesbaren Format ausgeben zu können => aus 1Byte werden 2hex-Werte
- Ich muss jeden Hex-Wert als "Zeichen" in Java darstellen => Ergebnis= "zwei String-Zeichenwerte" (z.B. "FF" ist ein String der Länge/Größe = 2.)
- Java verwendet UTF-16 => jedes "String-Zeichen" wird also mit zwei Bytes kodiert. "FF" würde 2x2 Bytes benötigen?
- Schlussfolgerung => Der MD5-Hash im Byte-Format ist 16 Bytes groß, aber die Darstellung als Java-Hex-UTF16-String verbraucht 16x2x2 = 64Bytes (im Speicher)!?!? Ist dies korrekt?
Wie hoch ist der Speicherverbrauch in Cassandra, wenn dieser als Zeilenschlüssel verwendet wird?
Wenn ich direkt das Byte-Array aus der Hash-Funktion verwendet hatte, würde ich annehmen, dass es 16 Bytes in Cassandra verbraucht?
Aber wenn ich die hex-String-Darstellung verwenden (wie oben erwähnt), kann Cassandra "komprimieren" es zu einem 16 Bytes oder wird es auch 64 Bytes in Cassandra nehmen? Ich nehme an, 64 Bytes in Cassandra, ist das richtig?
Welche Art von Schlüsseln verwenden Sie? Verwenden Sie direkt das Ergebnis einer Hash-Funktion oder kodieren Sie zuerst in eine Hex-Zeichenkette und verwenden dann die Zeichenkette? (In MySQL habe ich immer, wenn ich einen Hash-Schlüssel verwendet habe, die Hex-String-Darstellung davon verwendet... So ist er direkt in den MySQL-Tools und in der gesamten Anwendung lesbar. Aber ich merke jetzt, dass ich damit Speicherplatz verschwende...)
Vielleicht ist mein Denken völlig falsch, dann wäre es nett zu erklären, wo ich falsch liege.
Herzlichen Dank! jens