首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >astyanax突变批处理

astyanax突变批处理
EN

Stack Overflow用户
提问于 2012-08-07 13:20:57
回答 1查看 846关注 0票数 1

我需要了解对MutationBatch.execute()的调用在运行代码的服务器上是否是安全的。

看看下面的代码(从Astyanax示例中复制)。我打算使用此代码修改两个不同列族中的2行。我需要确保(100%),如果执行此代码的服务器在执行过程中的任何一点崩溃/失败:- Cassandra数据存储中没有任何更改-所有更改(2行)都应用于Cassandra数据存储。

我特别关注行"OperationResult结果= m.execute();“。我假设这会转换成这样的内容:将所有修改写入Cassandra中的提交日志,然后原子地触发在Cassandra内执行的更改(而Cassandra保证在某个服务器上执行)。

在这方面的任何帮助都是非常感谢的。

谢了斯文。

代码:

代码语言:javascript
复制
MutationBatch m = keyspace.prepareMutationBatch();

long rowKey = 1234;

// Setting columns in a standard column
m.withRow(CF_STANDARD1, rowKey)
    .putColumn("Column1", "X", null)
    .putColumn("Column2", "X", null);

m.withRow(CF_STANDARD1, rowKey2)
    .putColumn("Column1", "Y", null);

try {
    OperationResult<Void> result = m.execute();
} catch (ConnectionException e) {
    LOG.error(e);
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-08 11:46:48

writes

在Cassandra中,写在行级是原子的,这意味着为给定行键插入或更新列将被视为一个写操作。Cassandra不支持将多行更新捆绑到一个全或无操作的意义上的事务。

这意味着,没有办法100%确定,突变将更新两个不同的行或没有。但是,由于Cassandra0.8,您将有这样的保证,至少在单行内--在单行中修改的所有列都将成功或不成功--这就是全部。

您可以将不同行上的突变视为单独的事务,它们是在单个突变调用中发送的事实并不会改变任何事情。Cassandra内部将在行键上将所有操作组合在一起,并作为单独的原子操作执行每一行的变异。

在您的示例中,您可以确保rowKey (Column1Column2)或rowKey2(Column1)被持久化,但永远不会两者兼而有之。

您可以启用暗示的汉道夫写,这将增加概率,写入将随着时间的推移,但再次,这不是酸性DB。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11846963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档