如何从cassandra 2.1中的缓存中清除准备好的语句

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

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,此时不仅我认为失败的插入显示,但后续的工作正常 . 这非常令人不安,但幸运的是我只在测试实例中完成了这项工作 . 我确实需要在 生产环境 中进行此更改,并且重新启动群集以添加单个字段实际上不是一个选项 . 有没有更好的方法让集群驱逐缓存的预准备语句?

回答(1)

2 years ago

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

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

您也可以选择启用跟踪以查看服务器端的内容

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

要使用 Java driver 启用跟踪,只需在 statement 对象上调用 enableTracing()