2012-05-27 64 views

回答

1

卡桑德拉不存在ID。這是一個簡單的鍵/值存儲,您需要爲您提供自己的文檔ID(稱爲鍵)。建議的方法是使用UUID,它旨在避免衝突的密鑰。

做一些像newId = lastId + 1是不安全的。 Cassandra並沒有設計支持交易,也沒有辦法使讀寫成原子。併發事務可以使這個失敗:

  • 過程A讀取10
  • 方法B讀取10
  • 過程A 10 + 1 = 11
  • 方法B中寫入10 + 1 = 11 ...糟糕,應該是12.

如果您有興趣,Cassandra Counters可解決此問題。

0

如果是從SQL到NoSQL的打算,另一個值得考慮的選擇是playOrm

它的可擴展JQL像這樣(注意另外的分區,但除此之外,SQL是一樣的)

@NoSqlQuery(name="findJoinOnNullPartition", query="PARTITIONS p(:partId) select p FROM TABLE as p INNER JOIN p.security as s where s.securityType = :type and p.numShares = :shares"), 

此外,它也會爲您生成唯一的羣集密鑰,因此您並不總是需要處理密鑰生成;)。 playOrm的密鑰生成的一個例子是在這裏(這是一個簇中是唯一的)...

https://github.com/deanhiller/playorm/blob/master/input/javasrc/com/alvazan/orm/api/base/spi/UniqueKeyGenerator.java