【问题标题】:Batch update fails when connecting to an "old" column family with DataStax driver使用 DataStax 驱动程序连接到“旧”列族时批量更新失败
【发布时间】:2015-11-01 12:54:59
【问题描述】:

我有一个在早期 Cassandra 版本中创建和定义的 Cassandra 进程。到目前为止,我们使用了一个 hector 驱动程序来连接它。我正在将驱动程序更改为 DataStax 以享受 CQL 的新功能并允许异步访问。

我在进行过渡的过程中遇到了一些问题。我已经阅读了this upgrade guide,尽管我仍然遇到一些问题,但它提供了一些启示。

最大的问题是我无法使用大于 1 的协议版本访问密钥空间。当我尝试以下 python 代码时:

cass4 = Cluster(['MyIp'])
cass4.protocol_version = 2
session = cass4.connect('myKeySpace')

此代码产生以下错误和警告:

ERROR:cassandra.connection:Closing connection <AsyncoreConnection(4849045328) IP:9042> due to protocol error: code=000a [Protocol error] message="Invalid or unsupported protocol version: 2"
WARNING:cassandra.cluster:Downgrading core protocol version from 2 to 1 for IP
WARNING:cassandra.metadata:Building table metadata with no column meta for keyspace

使用 Java 驱动程序,如果我尝试使用大于 1 的协议版本进行连接,我只会收到 NoHostAvailableException: All host(s) tried for query failed 连接错误。

这个连接问题让我在构建合适的 Java DAO 时遇到了很多麻烦。例如,如果我尝试进行批量更新,例如:

BatchStatment batch = new BatchStatement()
batch.add(somePreparedStatement)
cqlSession.executeAsync(batch)

我收到以下错误:

com.datastax.driver.core.exceptions.UnsupportedFeatureException: Unsupported feature with the native protocol version 1 (which is currently in use): Protocol level batching is not supported

使用 cqlsh 直接在集群节点上运行“BEGIN BATCH..”操作是可行的,所以我知道这个 CQL 命令可以执行,但我不知道如何在 Java 中准备它并使用协议版本 1 执行它。另外,集群中的 cassandra 和 CQL 版本似乎很合适:

[cqlsh 3.1.7 | Cassandra 1.2.13.2 | CQL spec 3.0.0 | Thrift protocol 19.36.2]

所以,问题是:

  1. 为什么会这样?
  2. 我可以使用大于 1 的协议版本连接到该密钥空间吗?
  3. 如果没有,我可以绕过这个批量更新问题吗?

【问题讨论】:

  • 这是否适用于全新的键空间?您使用的是哪个 Cassandra 版本?
  • 我正在使用 Cassandra 1.2.13.2。我会在一个全新的键空间上尝试代码并让你知道..

标签: java python cassandra cql datastax


【解决方案1】:

这个问题的答案终于找到了here

我可以将 Batch 和 PreparedStatements 结合起来吗?

从 Cassandra 2.0 和相应的 C# 版本开始, Java 和 Python 驱动,PreparedStatements 可以批量使用 操作(在此之前您仍然可以准备一个完整的批次 操作,但你需要先知道语句的数量 将包括在内)。

由于我的 Cassandra 版本是 1.2xx,我不能使用批量更新和准备好的语句。

解决方法是将查询创建为字符串(是的,这很脏),然后执行字符串查询。

【讨论】:

    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 2016-01-22
    • 2013-12-23
    • 2014-11-07
    • 2012-11-15
    • 2015-08-16
    • 2016-02-18
    • 1970-01-01
    相关资源
    最近更新 更多