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

从卡桑德拉接收已经准备好的声明

童化
2023-03-14

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

如果我的概念是正确的,那么从集群中接收已经准备好的语句而不是重复地重新生成它们将是有益的(1)。有办法这样做吗?如果是,我如何只接收我感兴趣的报表?

(1) 我所说的不是程序的一个实例的范围,而是没有共享内存的多个实例执行相同的查询。

共有1个答案

韩寂离
2023-03-14

正确:集群中的每个节点都缓存准备好的语句。但是,没有在客户端获取已经准备好的语句的机制。有很多原因,我不会在这里详细阐述。

您的应用程序只需准备一条语句,并在集群/会话的整个生命周期内保留这条语句。驱动程序处理的事情包括在所有节点上准备语句,以及在由于缓存回收或重启而丢失语句的节点上重新准备语句。

 类似资料:
  • 我正在使用Cassandra作为我的一个应用程序。我想使用Cassandra通过cql提供的Prepared语句。如果我准备了一个查询,这是否在所有节点中都准备好了?。 任何帮助是值得赞赏的。

  • 我们对DataStax Cassandra的查询使用缓存的准备声明。但是,如果我们需要向表中添加新列,我们需要重新启动应用程序服务器以重新缓存准备好的语句。 我在卡珊德拉遇到了这个错误,这解释了https://datastax-oss.atlassian.net/browse/JAVA-420的解决方案 它基本上提供了一种解决方法,在查询中不使用“SELECT*FROM table”,而是使用“s

  • 背景:我们正在使用Cassandra来存储一些时间序列数据,并且我们正在使用准备好的语句来访问数据。 我们通过以下方式对表中的数据进行分区: 时间段(如一周或一个月)和 保留策略(如 1 年、5 年或 10 年) 对于不同的表,我们需要为查询、时间段和保留策略的每个组合准备一个不同的语句(仅在使用时),因此我们将有一个爆炸式的预准备语句数量。一些数学: 在客户端,我只能在缓存中保留最常用的PS,但

  • 我已经开始使用DataTax PHP驱动程序学习PHP中的Cassandra,我必须使用准备好的语句在CQL中设置映射的值,查询是: 提交的“属性”是MAP类型,因此我尝试将其作为字符串传递: 在PHP中: 但是我得到了错误“java.lang.IllegalArgumentException”,对于准备好的语句中的映射或列表之类的集合,哪种语法是正确的?

  • 我试图使用datastax中的nodejs驱动程序,在cassandra 2.1.2中向用户定义的类型添加一个字段。我在cqlsh中使用<code>ALTER TYPE</code>添加了该字段。当我试图添加一个包含udt的行,并为新字段添加一个值时,它会以空值插入,而不是我提供的值。我强烈怀疑这与集群缓存准备好的语句的方式有关。因为我记得读到准备好的语句是由查询的哈希索引的,所以我尝试更改查询中

  • 我有这个代码: 我得到以下异常: 所有主机尝试查询失败(已尝试:/127.0.0.1:9042(com.datastax.driver.core.TransportException:[/127.0.0.1:9042]无法连接)),堆栈跟踪:com.datastax.driver.core.exceptions.NoHostAvailableException:所有主机尝试查询失败(已尝试:/12