1

我正在尝试使用 datastax 中的 nodejs 驱动程序将字段添加到 cassandra 2.1.2 中的用户定义类型。我ALTER TYPE在 cqlsh 中添加了该字段。当我尝试添加包含 udt 和新字段值的行时,它会以空值插入,而不是我提供的值。我强烈怀疑这与集群缓存准备好的语句的方式有关。因为我记得读过准备好的语句是由查询的哈希索引的,所以我尝试更改查询中的一些空格以查看它是否有帮助。这实际上似乎有效,但只有一次。随后的插入导致错误:

  message: 'Operation timed out - received only 0 responses.',
  info: 'Represents an error message from the server',
  code: 4352,
  consistencies: 10,
  received: 0,
  blockFor: 1,
  writeType: 'SIMPLE',
  coordinator: '127.0.0.1:9042',

并且似乎没有添加新行..直到我重新启动cassandra,此时不仅我认为失败的插入出现,而且后续的插入也可以正常工作。这非常令人不安,但幸运的是我只在测试实例中这样做了。但是,我确实需要在生产中进行此更改,并且重新启动集群以添加单个字段并不是一个真正的选择。有没有更好的方法让集群驱逐缓存的准备好的语句?

4

1 回答 1

0

我强烈怀疑这与集群缓存准备好的语句的方式有关。

将 Cassandra 日志置于 DEBUG 模式以确保准备好的语句缓存是根本原因。如果是,请创建一个 JIRA,以便开发团队可以修复它...

(可选)您还可以启用跟踪以查看服务器端发生的情况

要在cqlsh中启用跟踪,只需键入TRACING ON

要使用Java 驱动程序启用跟踪,只需enableTracing()调用statement对象

于 2016-03-08T19:55:39.697 回答