2014-10-29 91 views
2

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

回答

4

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架构的结果,该架构专注于传统关系数据库无法实现的可伸缩性和容错性。

+0

我知道卡桑德拉不支持事务atomicity.I'm试图找出是否有一些框架,将为我执行任务。昆德拉(https://github.com/impetus-opensource/Kundera/w iki/Transaction-Management)似乎做了这项工作,但我正在寻找Spring-data-cassandra项目的具体内容(http://projects.spring.io/spring-data-cassandra/) – Anish 2014-10-29 11:04:27

+0

对不起,@Anish,什么都没有就像SDC中那样。请随时通过https://jira.spring.io/browse/DATACASS – 2014-10-29 21:26:26

+0

@Mathew Adams创建请求问题:我在JIRA中记录了相同内容,但他们将其标记为无效。他们误解为Cassandra问题,而不是通过Spring而不是Cassandra创建封装的方式。你可以找到我的bug [这里](https://jira.spring.io/browse/DATACASS-180) – Anish 2014-11-01 17:56:45

3

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

原来如此,或许,最好相当于在春天数据 @Transactional(虽然,全酸是不是对于这个世界,它只是不这样,它扮演)

像这样的东西应该玩(你可以改变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);