Spring Data Cassandra的事务管理

4

我正在使用Spring和Cassandra作为底层数据库。已经参考了Spring的伞形项目“spring data cassandra”。 与Hibernate不同,无法找到事务是如何管理的。 如果您中的一些人已经将其合并,请分享包含Transaction Manager的详细信息。

2个回答

5
卡桑德拉不支持传统(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不支持事务的原子性。我正在尝试找出是否有一些框架可以为我执行此任务。Kundera(https://github.com/impetus-opensource/Kundera/wiki/Transaction-Management)似乎可以完成这项工作,但我正在寻找与Spring-data-cassandra项目(http://projects.spring.io/spring-data-cassandra/)相关的特定内容。 - Anish
抱歉,@Anish,在SDC中没有这样的东西。请随意在https://jira.spring.io/browse/DATACASS上创建一个问题请求它。 - Matthew Adams
@Mathew Adams:我已经在JIRA中记录了相同的问题,但是他们将其标记为无效。他们误解了它是Cassandra问题,而不是可以通过在Cassandra之上创建Spring包装器来集成的问题。您可以在此处找到我的错误记录:[https://jira.spring.io/browse/DATACASS-180] - Anish

5
卡桑德拉批处理默认情况下是原子性的。
因此,它很可能是Spring Data中@Transactional的最佳替代品(尽管完整的ACID并不存在于这个世界上,它只是不是那种方式的角色)。
以下类似的代码应该可以使用(您可以根据需要更改ConsistencyLevel和RetryPolicy的值 - 这就是要点!):http://docs.datastax.com/en/cql/3.0/cql/cql_reference/batch_r.html
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接