【问题标题】:Cassandra - transaction supportCassandra - 事务支持
【发布时间】:2010-06-04 18:55:59
【问题描述】:

我正在浏览 apache cassandra 并处理示例数据插入、检索等工作。

文档非常有限。

我有兴趣了解

  • 我们可以用 cassandra 完全替换 mysql/ oracle 之类的关系数据库吗?
  • cassandra 是否支持回滚/提交?
  • cassandra 客户端(thrift/hector)是否支持获取关联对象(我们将一个超级列的键保存在另一个超级列族中的对象)?

这对我继续前进有很大帮助。

提前谢谢你。

【问题讨论】:

    标签: java database nosql cassandra


    【解决方案1】:

    简短回答:不。

    按照设计,Cassandra 重视可用性和分区容错性而不是一致性1。基本上,在保持所有三个品质的同时获得可接受的延迟是不可能的:必须牺牲一个品质。这称为 CAP 定理。

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

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

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

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

    【讨论】:

    • 谢谢劳蒂斯。在考虑了所有特性之后,我们决定不使用 cassandra,而坚持使用关系数据库。
    • cassandra 邮件列表上关于交易的好帖子:cassandra-user-incubator-apache-org.3065146.n2.nabble.com/…
    • @Lautis «[一致性是可配置的] 但是不存在任何回滚语义»是什么意思?我对“但是”如何交易感兴趣与“一致性级别”有关吗?
    • 一个建议...使用“混合”方法。我们正在使用 mysql 和 Cassandra(用于不需要 ACID 事务的高读/写数据。)
    【解决方案2】:

    在版本 2.x 中,您可以将 CQL 语句组合在已记录的 batch 中,这是原子的。要么全部成功,要么都不成功。您也可以阅读有关lightweight transactions 的信息。 不仅如此 - Cassandra 有几个持久性管理器。您可以使用它们在客户端级别实现外键行为。例如,AchillesKundera

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我不同意外键只是另一个数据字段。 SQL 数据库中实现的强制类型处理当数据被其他连接删除时,就在您的连接试图引用它时。它将正确拒绝其中一个连接。在更高层实现时,您将如何强制执行此操作,而不会影响性能的锁定/资源同步?
      【解决方案4】:

      您必须使用批处理而不是提交和回滚。 批处理原子,这意味着多个表中的所有记录都提交或不提交原子模式 例如:

      var batch = new BatchStatement();
      batchItem= session.Prepare(stringCommand);
      batch.Add(batchItem);
      var result = session.ExecuteAsync(batch);
      

      【讨论】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-03
        • 1970-01-01
        • 2011-12-23
        相关资源
        最近更新 更多