2013-08-28 56 views
0

我們正在研究將系統從RDBMS遷移到Cassandra,並且無法找到將自動增量列轉換爲Cassandra的方法。我們實際上並不需要這樣做,它甚至可以包含字符,但它必須很短(理想情況下在8個字符以內)並且全球唯一。理想值會看起來像可讀行鍵cassandra

AB123456

的問題是,我們應該發生在應用程序代碼或卡珊德拉這個關鍵的第一部分?

第二部分: 如果卡桑德拉,怎麼樣?

如果應用程序代碼,生成候選代碼是否是可接受的模式,則嘗試插入,如果發生衝突,則重新生成關鍵候選並重試?

回答

1

在Cassandra中執行此操作的常用方法是使用uuid(如果ID應按時間排序,則使用timeuuid)。但是這些必須很長以獲得唯一性 - 它們是16個字節長。 (uuids是獨一無二的,因爲碰撞的概率非常低; timeuuids保證是唯一的,因爲它們包含關於生成主機的信息幷包含時間)。插入前檢查。如果沒有外部協調,總會有競爭條件。進入卡桑德拉2.0是比較和設置,它可以讓你做到這一點,但性能成本。

如果您使用隨機的8字符字符串,只包含數字和字母,則有36^8個可能的密鑰,在大約sqrt(36^8)〜100萬次操作後,碰撞變得非常可能。你可以通過使用任何字符來改善它,所以有256^8個鍵,在大約sqrt(256^8)〜40億次操作之後可能會發生碰撞。這可能太低了,所以最好使用更長的ID。