如何将cassandra与zookeeper集成以支持事务

时间:2011-02-22 11:59:40

标签: cassandra apache-zookeeper cassandra-0.7

我安装了Cassandra集群和Zookeeper服务器。现在我想使用zookeeper支持cassandra中的事务。我怎么做。

Zookeeper创建znode以执行读取和写入操作,数据来回通过Zookeeper中的znodes。我想知道如何使用Zookeeper支持cassandra中的回滚和提交功能。有没有什么办法可以在cassandra中的zookeeper或zookeeper配置中指定cassandra配置。

我单独了解cassandra和zookeeper如何读取和写入数据,但我不知道如何使用Java集成它们。

我们如何使用Zookeeper在Cassandra进行交易。

感谢。

4 个答案:

答案 0 :(得分:20)

  

我安装了Cassandra集群和Zookeeper服务器。现在我想使用zookeeper支持cassandra中的事务。我该怎么做。

很难。 Cassandra作为交易系统不能很好地运作。写入多行不是原子行,如果某些写入失败,则无法回滚写入,并且无法确保读者在读取时读取一致的视图。

  

我想知道如何使用Zookeeper支持cassandra中的回滚和提交功能。

Zookeeper不会帮助您,特别是提交功能。您可以向zookeeper写入足够的信息以便在发生故障时回滚,但如果您这样做,您也可以将回滚信息存储在cassandra中。

当您使用Zookeeper作为锁定服务时,Zookeeper和Cassandra可以很好地协同工作。查看Cages库。使用zookeeper协调对cassandra的读/写。

尝试使用cassandra作为事务系统,对多行和回滚进行原子提交将会非常令人沮丧。

答案 1 :(得分:1)

有些方法可以用来在没有ZooKeeper的情况下在Cassandra中实现事务。

Cassandra本身有一个名为Lightweight transactions的功能,它提供每个键的线性化和比较和设置。使用这些原语,您可以自己在应用程序级别实现可序列化的事务。

有关详细信息和逐步可视化,请参阅Visualization of serializable cross shard client-side transactions帖子。

此方法的变体用于Google的Percolator系统和CockroachDB

顺便说一句,如果你对Read Committed隔离级别没问题,那么看看Peter Bailis撰写的RAMP transactions论文是否合理。

答案 2 :(得分:0)

Cassandra的CQL3有一个BATCH功能(Cassandra 1.2是发布CQL3的正式版本),据称可以原子地将BATCH中的所有更新作为一个单元全部或全部应用。

这并不意味着您可以像RDBMS那样回滚成功执行的BATCH,而这必须是手动完成的。

根据您提供给BATCH语句的一致性和首选项,可以使用UNLOGGED选项在一定程度上增加或减少更新的原子性保证。

http://www.datastax.com/docs/1.2/cql_cli/cql/BATCH

答案 3 :(得分:0)

好吧,我不是这个(实际上远远不是)的代理人,但是我看到它的方式,你要么部署一些自己制作的中间件,以保证你正在寻找的特定属性,或者你可以让Cassandra将数据写入辅助文件,然后通过文件系统复制它们,因为Java中的复制函数可以作为原子操作。

我对你正在考虑的数据文件的大小一无所知,所以我真的不知道它是否可行,但是可能有办法通过较小的信息使用这个属性,然后将它们组合起来作为一个整体。

只是我的2美分......