【问题标题】:How to identify a value in cassandra / NoSQL?如何识别 cassandra / NoSQL 中的值?
【发布时间】:2014-11-24 23:40:47
【问题描述】:

我正在使用 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 之类的操作是否安全?如何操作?

谢谢。

【问题讨论】:

    标签: nosql cassandra


    【解决方案1】:

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

    像newId = lastId + 1 这样的操作根本不安全。 Cassandra 在设计上不支持事务,也无法使读写原子化。并发事务可能会导致失败:

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

    如果您有兴趣,Cassandra Counters 会解决这个问题。

    【讨论】:

      【解决方案2】:

      如果您要从 SQL 转到 noSQL,另一个需要考虑的选项是 playOrm

      它像这样执行 Scalable 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

      【讨论】:

        猜你喜欢
        • 2012-05-10
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-16
        • 1970-01-01
        相关资源
        最近更新 更多