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

Cassandra nodejs DataStax驱动程序不通过预准备语句执行返回新添加的列

帅银龙
2023-03-14

在schema中添加了一对列之后,我想通过< code>select *来选择它们。相反,< code>select *返回旧的列集,而不返回新的列集。

根据文档建议,我使用{prepare:true}来平滑JavaScript浮点数和卡桑德拉整数/bigints差异(我真的不需要这里准备好的语句,它只是为了解决这个响应错误:预期的4或0字节int问题,我也不想用查询提示来打扰自己)。

所以在第一次执行< code>select *时,我有3列。之后,我在模式中添加了两列。如果与< code>{prepare: true}一起使用,则< code>select *仍返回3列,如果不与它一起使用,则返回5列。

我想有一种方法来可靠地刷新缓存,或者让cassandra driver在每次应用启动时准备语句。

我不认为重新启动数据库集群是一种可靠的方法。

共有1个答案

危钱明
2023-03-14

这实际上是Cassandra中的一个问题,已在2.1.3(Cassandra-7910)中修复。问题是,在模式更新时,准备好的语句不会从Cassandra端的缓存中移除。如果您运行的版本低于2.1.3(这很可能是上周发布的2.1.3),除非您创建另一个稍微不同的单独的准备语句(比如额外的空格或导致单独的唯一语句的东西),否则确实没有办法解决这个问题。

当使用2.1.3运行并更改表模式时,C*将从缓存中正确地驱逐相关的准备好的语句,当驱动程序使用该语句发送另一个查询时,Cassandra将使用“未准备好”消息进行响应,这将促使nodejs驱动程序重新准备查询并为您重新发送请求。

在Node.js驱动程序上,您可以通过编程方式清除准备好的语句元数据:

client.metadata.clearPrepared(); 
 类似资料:
  • 用于cassandra的Datastax Java驱动程序(cassandra-driver-core 2.0.2)支持PreparedStatements以及QueryBuilder API。使用其中一种比另一种有什么特别的优势吗?缺点? 文档:http://www.datastax.com/documentation/developer/java-driver/2.0/common/drive

  • 我在使用DataStax php驱动程序1.0.0-rc和Cassandra 2.2.3的Prepared Statements时遇到了一个奇怪的错误。我在这一行遇到了一条异常: 我看到了这个错误: 下面是用于与Cassandra通信的类存根: 如果我将Simple Statemetn与标准select查询一起使用,它会起作用。 有什么建议吗?

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

  • 问题内容: 我正在尝试对大多数商业自动化工具中常见的基于Selenium的框架实施“对象选择器”。为此,我正在使用Javascript命令在鼠标位置找到该元素,但没有得到我期望的元素。 如果我使用的是ChromeDriver或InternetExplorerDriver,则脚本始终返回标头对象。无论我查看什么网页或鼠标的位置。尽管听起来好像脚本采用的是坐标0,但0而不是鼠标位置,我已经确认Curs

  • 我试图了解MySQL JDBC驱动程序中的客户端仿真准备语句是如何工作的。 第1部分我在网上读到,对于准备好的语句,关系数据库处理JDBC/SQL查询时涉及四个步骤,它们如下: 分析传入的SQL查询 编译SQL查询 规划/优化数据采集路径 执行优化的查询/获取并返回数据 如果客户端仿真准备好的语句没有往返数据库,那么它如何执行步骤3?还是客户端仿真准备语句的工作方式不同? 第二部分我还做了两个实验

  • 当我使用预准备语句异步执行多个语句时,我得到带有损坏数据的JSON。键和值完全损坏了。 首先,当我使用自定义脚本对我们的项目执行压力测试时,我遇到了这个问题。我们使用DataStax C驱动程序并执行来自不同光纤的语句。 然后,我试图隔离这个问题,并编写了一个简单的C#程序,它在一个循环中启动多个Task。每个任务都使用一次创建的prepared语句从基中读取数据。对于某些行,结果完全混乱,例如: