【问题标题】:how do I evict prepared statement from cache in cassandra 2.1如何从 cassandra 2.1 的缓存中驱逐准备好的语句
【发布时间】:2016-06-22 21:08:28
【问题描述】:

我正在尝试使用 datastax 中的 nodejs 驱动程序将字段添加到 cassandra 2.1.2 中的用户定义类型。我在 cqlsh 中使用 ALTER TYPE 添加了该字段。当我尝试添加包含 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,此时不仅我认为失败的插入出现,而且后续的插入工作正常。这非常令人不安,但幸运的是我只在测试实例中这样做了。但是,我确实需要在生产中进行此更改,并且重新启动集群以添加单个字段并不是一个真正的选择。有没有更好的方法让集群驱逐缓存的prepared statement?

【问题讨论】:

    标签: cassandra datastax cassandra-2.1


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2010-09-18
      • 2015-08-13
      • 2014-09-27
      • 1970-01-01
      相关资源
      最近更新 更多