4

我使用 Spring 和 Cassandra 作为底层数据库。曾提到过春雨伞项目“spring data cassandra”。与hibernate不同,无法找到此处管理事务的方式。如果你们中的一些人已经合并了交易管理器,请分享交易管理器的详细信息。

4

2 回答 2

5

Cassandra 不支持传统(ACID)意义上的事务。有一些结构可以在特殊情况下实现诸如事务原子性之类的东西,例如原子批处理(请参阅http://www.datastax.com/dev/blog/atomic-batches-in-cassandra-1-2)或轻量级事务(请参阅http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0),但没有任何东西适合全面的事务管理。

这主要是 Cassandra 架构的结果,它专注于可扩展性和容错性,达到传统关系数据库无法实现的水平。

于 2014-10-29T05:44:32.367 回答
5

Cassandra 批处理当前默认是原子的。 http://docs.datastax.com/en/cql/3.0/cql/cql_reference/batch_r.html

因此,它可能是 Spring 数据中与 @Transactional 的最佳等价物(虽然,完整的 ACID 不适合这个世界,但它的播放方式并非如此)

应该播放这样的东西(您可以根据需要更改 ConsistencyLevel 和 RetryPolicy 的值 - 这就是问题!):

Insert insert1 = CassandraTemplate.createInsertQuery("table1", value1, new WriteOptions(ConsistencyLevel.LOCAL_ONE, RetryPolicy.DEFAULT), cassandraConverter);

Insert insert2 = CassandraTemplate.createInsertQuery("table2", value2, new WriteOptions(ConsistencyLevel.LOCAL_ONE, RetryPolicy.DEFAULT), cassandraConverter);

Batch batch = QueryBuilder.batch(insert1,insert2);

//cassandraOperations - object of CassandraTemplate , injected by Spring
cassandraOperations.execute(batch);
于 2015-08-10T08:03:04.800 回答