Astyanax中支持Cassandra CQL3

7

Astyanax是否支持使用CQL3的预处理语句进行“insert into”操作? 我使用最新的Astyanax库1.56.24和Cassandra 1.2.1。当我尝试使用CQL3执行预处理语句时:

keyspace.prepareQuery(conn.CF_CONTACTS)
  .withCql("INSERT INTO contacts (a, b) VALUES (?, ?);")
  .asPreparedStatement()
  .withStringValue("123")
  .withStringValue("456")
  .execute();;

I get the following exception:

Caused by: InvalidRequestException(why:Cannot execute/prepare CQL2 statement since the CQL has been set to CQL3(This might mean your client hasn't been upgraded correctly to use the new CQL3 methods introduced in Cassandra 1.2+).)
at org.apache.cassandra.thrift.Cassandra$prepare_cql_query_result.read(Cassandra.java:38738)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_prepare_cql_query(Cassandra.java:1598)
at org.apache.cassandra.thrift.Cassandra$Client.prepare_cql_query(Cassandra.java:1584)
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$6$3$1.internalExecute(ThriftColumnFamilyQueryImpl.java:747)
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$6$3$1.internalExecute(ThriftColumnFamilyQueryImpl.java:742)
at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:56)
2个回答

4

我使用 Astyanax 1.56.31 成功实现了这个功能。您需要在 AstyanaxConfigurationImpl 实例中设置以下内容:

.setTargetCassandraVersion("1.2")
.setCqlVersion("3.0.0")

2
这是因为cassandra客户端的更改通知了使用CQL3实现不当的高级客户端应用程序。详见https://issues.apache.org/jira/browse/CASSANDRA-5172。看起来Astyanax要么没有升级到这个版本的cassandra客户端,要么他们没有记录下来。我目前正在寻找解决方案。

你可以使用DataStax Java驱动程序代替Astyanax。https://github.com/datastax/java-driver。它尚未发布,但对我来说运行良好。 - devsprint

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