使用Phantom-dsl和Cassandra中的一致性级别

问题描述 投票:0回答:2

目前使用 -

cqlsh> show version
[cqlsh 4.1.1 | Cassandra 2.0.17 | CQL spec 3.1.1 | Thrift protocol 19.39.0]

使用phantom-dsl 1.12.2,Scala 2.10 ..

我无法弄清楚如何在查询上设置一致性级别。

有预定义的函数insert()select()作为CassandraTable的一部分。我怎样才能将一致性级别传递给它们?

insert.value(....).consistencyLevel_=(ConsistencyLevel.QUORUM)

不起作用并因错误而失败(可能是因为这会在查询结尾处附加“USING CONSISTENCY QUORUM”)。这是我得到的实际例外

com.datastax.driver.core.exceptions.SyntaxError: line 1:424 no viable alternative at input 'CONSISTENCY'
at com.datastax.driver.core.Responses$Error.asException(Responses.java:122) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:120) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:186) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler.access$2300(RequestHandler.java:45) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:754) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onSet(RequestHandler.java:576) ~[cassandra-driver-core-2.2.0-rc3.jar:na]

我从this pull请求的文档和讨论中看到我可以在SimpleStatement上执行setConsistencyLevel(ConsistencyLevel.QUORUM),但我不希望重写所有不同的insert语句。

UPDATE

只是关闭这个问题的循环。我通过创建一个自定义InsertQuery然后使用它而不是final def insert中的CassandraTable提供的那个来解决这个问题。

  def qinsert()(implicit keySpace: KeySpace) = {
     val table = this.asInstanceOf[T]
     new InsertQuery[T, M, Unspecified](table, CQLQuery("INSERT into keyspace.tablename", consistencyLevel = ConsistencyLevel.QUORUM)
  }
scala cql3 phantom-dsl
2个回答
4
投票

首先,幻像中没有setValue方法,你使用的API方法最后缺少一个=

正确的结构是:

Table.insert .value(_.name, "test") .consistencyLevel_=(ConsistencyLevel.Quorum)

正如您在stackoverflow上一样,错误堆栈跟踪和不起作用的具体细节通常比“不工作”更可取。


0
投票

我终于想出了如何使用phantom-dsl正确设置一致性级别。

使用语句,您可以执行以下操作:

statement.setConsistencyLevel(ConsistencyLevel.QUORUM)

另外,看一下测试项目,我一直在努力帮助像你这样的人使用phantom-dsl的例子:

https://github.com/iamthiago/cassandra-phantom

© www.soinside.com 2019 - 2024. All rights reserved.