如何识别cassandra / NoSQL中的值?

时间:2012-05-27 08:08:11

标签: nosql cassandra

我将使用Cassandra从SQL转到NoSQL。

我看过Do You Really Need SQL to Do It All in Cassandra?。这说明了sql select,join,group by和order by,但是在sql数据库中没有关于“id”概念的内容。在SQL中,所有值都具有唯一标识符。

nosql / cassandra有类似的东西吗?什么?使用Cassandra进行像newId = lastId + 1之类的事情或类似的事情是否安全?

感谢。

2 个答案:

答案 0 :(得分:1)

Cassandra中不存在

ID。它是一个简单的键/值存储,您需要为您提供自己的文档ID(称为键)。建议的方法是使用UUID,它旨在避免冲突的密钥。

newId = lastId + 1这样的事情根本不安全。根据设计,Cassandra不支持事务,也没有办法使read + write原子化。并发事务可能会导致失败:

  • 流程A读取10
  • 流程B读取10
  • 进程A写入10 + 1 = 11
  • 进程B写入10 + 1 = 11 ... oops,这应该是12。

如果您有兴趣,Cassandra Counters可以解决此问题。

答案 1 :(得分: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