2017-08-07 33 views
0

我试图插入的数据量非常小异步使用phantomcassandra 3:9但此查询状态越来越WriteTimoutException失败: INSERT INTO test_db.test_tbl(name, last, ts) VALUES('aaa', 'bbb', 1502109409) IF NOT EXISTS USING TTL 0; 我得到以下异常:在CAS操作

com.datastax.driver .core.exceptions.WriteTimeoutException:卡桑德拉在一致性串行写查询期间 超时(1个复制品均需要 但只有0承认写)

在 com.dat astax.driver.core.exceptions.WriteTimeoutException.copy(WriteTimeoutException.java:100)

在 com.datastax.driver.core.Responses $ Error.asException(Responses.java:134)

在 com.datastax.driver.core.RequestHandler $ SpeculativeExecution.onSet(RequestHandler.java:507)

在COM .....

我正在卡桑德拉与码头工人。我试图改变cassandra.yaml write_request_timeout_in_ms: 20000但这并没有太大的区别。

更新: 我试过的一致性级别设置为ONE(也尝试过其他):

insert 
     .value(_.name, "aaa") 
     .value(_.last, uuid) 
     .value(_.ts, Random.long) 
     .ifNotExists() 
     .consistencyLevel_=(ConsistencyLevel.ONE) 

但异常仍显示

回答

0

“的一致性串行写查询时卡桑德拉超时”您正在使用IF NOT EXISTS关键字,这是一个Lightweight transactions

Cassandra通过扩展Paxos共识来实现轻量级事务协议,它基于一个基于法定人数的算法。 Paxos确保以四次往返为代价的线性化一致性。

这听起来像一个高性价比,或许太高了,如果你有需要每一个操作是线性化应用程序的罕见病例。因此,对于那些绝对必要的情况,请预留轻量级交易

来源:https://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0

+0

其实我试图插入只是100-200记录。 – igx

+0

轻量级交易的成本非常高,请尝试不带'IF NOT EXISTS'的查询 –