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

Cassandra-如何重新绑定密钥空间和表?获取警告-重新准备已准备好的查询通常是一种反模式

郭彬郁
2023-03-14

收到警告:

重新准备已经准备好的查询通常是一种反模式,可能会影响性能。考虑只准备一次声明。

我看到了各种类似的问题,例如Datastax:重新准备已经准备好的查询警告,但它们没有解决重新分配查询使用的键空间或表的问题。

我通常可以重用查询,但它需要按键空间和表缓存它,并且我不想管理状态。或者,我可以在执行查询之前重新绑定键空间和表(然后无需重新创建):

我正在使用的插入查询

def insertQuery(keyspace: String, table: String): Insert = QueryBuilder.insertInto(keyspace, table)
    .value("c1", QueryBuilder.bindMarker())
    .value("c2")
    .value(...)
    .value("c_n")

需要这样的东西:

QueryBuilder.insertInto(keyspace = ???BIND MARKER????, table = ???BIND MARKER???)

共有1个答案

陶博耘
2023-03-14

你不能绑定keyspace

如果您不想缓存已准备好的查询,那么您真的不需要使用它们-只需生成Simple语句-它会更有效,因为现在如果您对每个请求进行准备,您将进行2次网络往返-一次用于准备查询,另一次用于执行查询。

但我建议在启动/首次连接时准备所有必要的查询,因为它们可以带来相当显着的性能改进(当然,如果您愿意的话)。

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 如何在MySQL语句中包含PHP变量 (10个答案) 4个月前关闭。 我有一个使用以下代码的mysqli查询: 但是,所有数据都是从HTML文档中提取的,因此为了避免错误,我想使用准备好的语句。我找到了PHP文档,但没有UPDATE示例。 问题答案: 一个与插入或选择相同。只需将所有变量替换为。

  • 我有一个在Docker中运行的Cassandra,我想在数据库准备就绪时启动一个CQL脚本。我尝试检查端口以检测它何时就绪: 但是在数据库真正准备好之前就打开了端口,因此失败。如何正确检查Cassandra状态并启动脚本?提前道谢。

  • 问题内容: 这个问题已经在这里有了答案 : 从PDO准备好的语句中获取原始SQL查询字符串 (16个答案) 5个月前关闭。 有没有一种方法可以检索用于生成PDO Prepared语句对象的查询? 问题答案: 尝试$ statement-> queryString 。

  • 我已经回顾了类似的问题“查看并清除Postgres缓存/缓冲区?,但所有的答案都集中在数据缓冲区上,并且自2010年以来,Postgresql发生了很大变化。 与那个问题的OP不同,我不是在计算性能时寻找一致的行为,而是在数据库随时间变化时寻找自适应的行为。 在我的应用程序中,在作业执行开始时,工作表中的行为空。查询运行非常快,但是随着时间的推移,性能下降,因为准备好的语句没有使用理想的访问路径(

  • 我有下面的代码,我想在它上面关闭preparedStatement对象,因为它是作为一个来自sonar的bug提出的。 如何关闭preparedStatement对象?我看到的大多数示例大多使用try/finally或try with resources,然后创建对象并使用它try and close in finally。然而,在这里,对象是在单独的函数中创建的,它从那里返回,然后被使用。所以创

  • 以下代码在准备时失败: 我发现:警告:mysqli::prepare()[mysqli.prepare]:无法获取mysqli。。。我在上面的代码中做错了什么?我检查了语法文档,但是如果我尝试将查询作为sql进行pas,我会得到一个语法错误。对于mysqli语法错误是否有一个好的调试工具?