Cassandra - 交易支持

时间:2010-06-04 18:56:00

标签: java database nosql cassandra

我正在浏览apache cassandra并处理样本数据插入,检索等。

文档非常有限。

我有兴趣知道

  • 我们可以完全用cassandra替换像mysql / oracle这样的关系db吗?
  • cassandra支持rollback / commit吗?
  • cassandra客户端(thrift / hector)是否支持获取相关对象(我们在另一个超级列族中保存一个超级列的密钥的对象)?

这将有助于我进一步深入。

提前谢谢。

4 个答案:

答案 0 :(得分:29)

简短回答:不。

根据设计,Cassandra会将可用性和分区容差视为一致性1。基本上,在保持所有三种品质的同时,不可能获得可接受的延迟:必须牺牲一种品质。这称为CAP定理。

可以使用一致性级别在Cassandra中配置一致性,但是不存在任何回滚语义。即使第一次写入成功,也无法保证您能够回滚更改。

如果您不想在Cassandra上构建具有事务或锁的应用程序,您可能需要查看Zookeeper,它可用于提供分布式同步。

你可能已经猜到了这一点,但Cassandra没有外键或类似的东西。这必须手动处理。我对Hector并不熟悉,但是更高级别的客户可以半自动完成。

您是否可以使用Cassandra轻松替换RDBMS取决于您的具体用例。在您的用例中(基于您的问题),可能很难这样做。

答案 1 :(得分:6)

在版本2.x中,您可以在原始的batch中组合CQL语句。全部或全部语句都不会成功。您也可以阅读lightweight transactions。 更重要的是 - Cassandra有几个持久性管理器。您可以使用它们在客户端级别上执行外键行为。例如,AchillesKundera

答案 2 :(得分:2)

如果Zookeeper能够处理具有Oracle质量的事务,那么它就完成了交易。在任何数据库之上实现关系和关系完整性都没有问题。外键只是另一个数据字段。 ACID / Transactions是关键问题。

答案 3 :(得分:0)

  1. 当然可以,但这完全取决于您的用例。如果您没有为您的用例选择正确的数据库,那么您需要自己担心很多事情。例如,在 rdbms 中,地理分布不提供您需要找到一种方法来做到这一点。在 cassandra 中,您在某些条件下缺乏一些酸性特性。您需要在应用程序端处理这些属性。

  2. 是的,但仅限于某些用例。您可以使用批处理属性。它支持回滚,但你缺乏隔离。我不确定 OSS Cassandra 中是否存在此属性。欲了解更多信息look

  3. 不明白你说的超级列是什么意思。如果您要求在另一个表列中查找 id,是的,您可以做到,为什么不呢。但是绝对不明白你说的超级列是什么意思。

总体上 Cassandra 不符合 ACID,但有一些功能可以帮助您在某些条件下符合 ACID,例如批处理、轻量级事务。