2010-06-04 79 views
25

我正在通过apache cassandra并处理样本数据插入,检索等。Cassandra - 交易支持

文档非常有限。

我想知道

  • 我们可以完全取代关系数据库如MySQL /甲骨文与卡桑德拉?
  • 确实cassandra支持回滚/提交?
  • 确实cassandra客户端(thrift/hector)支持获取关联对象(我们在另一个超级列族中保存一个超级列表项的对象)?

这将帮助我进一步深入。

谢谢你提前。

回答

26

简短的回答:

号在设计上,卡桑德拉重视可用性和分区容忍了一致性1。基本上,不可能在保持所有三种品质的同时获得可接受的等待时间:必须牺牲一个品质。这被称为CAP定理。

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

如果你不想在Cassandra之上建立事务或锁的应用程序,你可能想看看Zookeeper,它可以用来提供分布式同步。

您可能已经猜到了这一点,但Cassandra没有外键或类似的东西。这必须手动处理。我不太熟悉赫克托尔,但是更高级别的客户可以半自动地做到这一点。

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

+0

谢谢劳蒂斯。 考虑到所有功能后,我们决定不去cassandra并坚持关系数据库。 – 2010-07-10 11:41:14

+1

cassandra邮件列表上有关交易的良好线索:http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/best-practices-for-simulating-transactions-in-Cassandra-td7064256.html – Zanson 2011-12-22 23:20:11

+0

谢谢。很好的答案! – Amresh 2012-08-29 18:45:16

2

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

+0

我不同意外键只是另一个数据字段。 SQL数据库中实施的强制类型处理数据何时被其他连接删除的数据,以及连接尝试引用它时的情况。它会正确拒绝其中一个连接。在高层实现时,如何执行这些操作,而不会影响性能的锁定/资源同步? – 2014-04-23 10:03:34

5

在版本2.x中,您可以组合原子记录为batch的CQL语句。无论是全部还是全部都不成功。你也可以阅读关于lightweight transactions。 不仅如此,还有几个Cassandra的持久化管理器。您可以通过它们在客户端级别获取外键行为。例如,AchillesKundera