2014-02-18 45 views
3

爲什麼在Cassandra鍵中通常定義爲UUID。看起來密鑰是在客戶端生成的,爲什麼不直接存儲爲字符串?作爲UUID專門存儲有什麼好處?Cassandra uuid作爲行鍵

回答

3

Cassandra Keys可以被定義爲任何類型(或其組合),因此您不受UUID限制。

但是,爲什麼你會使用UUID在一個字符串:

UUID是一個128位。字符串是可變長度,UUID的字符串十六進制表示將需要32個字符。如果您使用的是16位unicode字符,則意味着每個密鑰需要512位或4倍的空間。

4

一個可能與卡桑德拉任意鍵,一鍵是bytearray反正。如果客戶想要擁有像「foobar」或其他任意長度的字符串,那麼它沒有任何問題。 Cassandra客戶端在傳輸到Cassandra服務器之前將其轉換爲字節數組。從技術上講,它將作爲「foobar」存儲在服務器端。

還有其他的事情之一需要考慮的關鍵方式決定時:

  • 密鑰長度對Cassandra的性能直接影響。保持它們儘可能短,以便它們對於所需的數據訪問仍然有用。對數據訪問無用的短密鑰並不比具有更好獲取/掃描屬性的更長密鑰更好。設計鑰匙時需要權衡。如果你有很長的字符串作爲鍵,那麼把它們散列成UUID可能是個好主意。
  • 您可以存儲UUID爲具有UUID像「f5606950-98d1-11e3-a5e2-0800200c9a66」而是一種更好的主意人類可讀的字符串
  • 注意是使用,只需佔用16個字節來存儲它的內部數據類型。
  • 你需要做出決定是否使用OrderedPreservingPartitioner or RandomPartitioner前期,有取捨的數量,但什麼是最重要的是它將如何影響整個集羣密鑰分發。通常使用OrderedPreservingPartitioner,因爲它允許進行有意義的掃描,具體取決於它通常導致熱/冷Cassandra節點的關鍵值。爲了再次提供幫助,要麼使用原始密鑰的散列 - UUID,要麼使用某個UUID預先輸入一個真正的密鑰。
  • 你打算如何來訪問你的鑰匙,這正好從簡單get,以slice和過於忽略delete,人們往往發現,UUID是一個很好的妥協
  • 你打算如何進行負載均衡數據
1

當存在大量行時,這節省了磁盤空間。

當行數較多時,通過減少取出磁盤的數據量來降低性能。