当前位置: 首页 > 知识库问答 >
问题:

如何从卡桑德拉 2.1 中的缓存中逐出准备好的语句

公良琛
2023-03-14

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

共有1个答案

韦泳
2023-03-14

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

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

或者,您还可以启用跟踪以查看服务器端发生了什么

若要在 cqlsh 中启用跟踪,只需键入“跟踪打开”

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

 类似资料:
  • 我并不完全理解预准备语句的概念,但是根据python驱动程序文档,预准备语句是< code >“针对至少一个Cassandra节点准备的语句”。对我来说,在集群中的某个地方有关于已经准备好的查询的信息。该文档还规定< code >“prepared statement应该只准备一次。重新准备语句可能会影响性能(因为该操作需要网络往返),"。 如果我的概念是正确的,那么从集群中接收已经准备好的语句而

  • 我相信我已经在Cassandra csharp驱动程序(版本2.7.3)的StatementFactory中发现了一个关于如何缓存准备好的语句的逻辑的bug。下面是使用案例。 我们发现,运行此删除后,只有第一个请求成功。在深入了解StatementFactory的源代码之后 您可以看到缓存仅使用 cql 语句。在我们的例子中,我们在不同的键空间(又名会话)中具有相同的表名。两个查询中的 cql 语

  • 我使用的是datastax Cassandra 2.0驱动程序,我在使用预先准备好的绑定语句。假设我想查询如下内容: 其中,UUID1、UUID2、UUID3是UUID值。使用绑定语句实现这一点的编程方法是什么?目前,我正在尝试以下方法: 这当前返回了错误的结果。如何正确格式化查询有何建议?

  • 由于基础设施的限制,我们无法将运行的Cassandra版本升级到 Cassandra现在抛出一个 在这种情况下,最好的解决方法是什么?大多数指南告诉我们简单地使用< code>UNSET:(。

  • 我需要一些帮助来定义使用Cassandra的数据堆垛对象映射器和使用预准备语句的常见解决方案之间的区别。而不是代码将对象映射到POJO类会更干净,在性能等方面还有其他优点。.感谢您的回答。

  • 卡桑德拉如何在内部存储空值?它是否占用任何存储空间?我正在编写一个应用程序,该应用程序使用具有许多列(100s)的表来表示不同类型的数据,因此列具有诸如“text1”,“text2”,“number1”,“number2”等名称,然后有一个外部JSON架构映射哪个列表示特定数据类型的什么值。因此,对于某种数据类型,许多列可能具有空值,并且我无法找到有关空值将占用的存储空间(如果有)的任何具体信息。