13

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

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

我分别知道 cassandra 和 zookeeper 是如何读取和写入数据的,但我不知道如何使用 Java 集成它们。

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

谢谢。

4

4 回答 4

23

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

好容易。Cassandra 不能很好地用作事务系统。对多行的写入不是原子的,如果某些写入失败,则无法回滚写入,也无法确保读取器在读取时读取一致的视图。

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

Zookeeper 不会帮你解决这个问题,尤其是提交功能。您可能能够向 zookeeper 写入足够的信息以在发生故障时回滚,但如果您这样做,您不妨将回滚信息存储在 cassandra.xml 中。

当您将 Zookeeper 用作锁定服务时,Zookeeper 和 Cassandra 可以很好地协同工作。看看笼子图书馆。使用 zookeeper 来协调对 cassandra 的读/写。

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

于 2011-03-14T02:08:08.187 回答
2

在没有 ZooKeeper 的情况下,您可以使用多种方法在 Cassandra 中实现事务。

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

有关详细信息和分步可视化,请参阅可序列化跨分片客户端事务的可视化帖子。

这种方法的变体在 Google 的Percolator系统和CockroachDB中使用。

顺便说一句,如果您对 Read Committed 隔离级别没问题,那么看看Peter Bailis的RAMP transactions论文是有意义的。

于 2016-03-04T07:06:52.107 回答
0

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

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

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

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

于 2013-06-14T22:01:40.897 回答
0

好吧,我不是这方面的专家(实际上远非如此),但在我看来,要么部署一些自己制作的中间件,以保证您正在寻找的特定属性,要么您可以让 Cassandra 编写数据到辅助文件,然后通过文件系统复制它们,因为 Java 中的复制功能作为原子操作工作。

我对您正在考虑的数据文件的大小一无所知,所以我真的不知道它是否可行,但是可能有一种方法可以通过较小的信息位使用此属性,然后将它们组合为一个整体.

只是我的2美分...

于 2013-11-12T01:26:30.597 回答