我们对DataStax Cassandra的查询使用缓存的准备声明。但是,如果我们需要向表中添加新列,我们需要重新启动应用程序服务器以重新缓存准备好的语句。
我在卡珊德拉遇到了这个错误,这解释了https://datastax-oss.atlassian.net/browse/JAVA-420的解决方案
它基本上提供了一种解决方法,在查询中不使用“SELECT*FROM table”,而是使用“selectcolumn_names FROM table”
但是现在我们在Delete语句上遇到了同样的问题。向表中添加新列后,Delete prepared语句不会删除记录。
我认为我们不能使用与Select语句中提到的相同的解决方法,因为*或column_names在删除行时没有意义。
任何帮助都将不胜感激。我们基本上希望避免在数据库表中添加任何内容时重启应用服务器
我们基本上希望避免在数据库表中添加任何内容时重启应用服务器
需要一点编码的简单解决方案:使用JMX
让我解释一下。
在您的应用程序代码中,保留所有准备好的语句的缓存(例如,您可以使用Guava缓存实现)。访问缓存的键可以是查询字符串。
现在,公开一个 JMX 方法来清除缓存,并强制应用程序再次重新准备查询。
每次更新架构时,只需调用适当的方法来清理缓存,就不需要重新启动应用程序
我正在使用Cassandra作为我的一个应用程序。我想使用Cassandra通过cql提供的Prepared语句。如果我准备了一个查询,这是否在所有节点中都准备好了?。 任何帮助是值得赞赏的。
我并不完全理解预准备语句的概念,但是根据python驱动程序文档,预准备语句是< code >“针对至少一个Cassandra节点准备的语句”。对我来说,在集群中的某个地方有关于已经准备好的查询的信息。该文档还规定< code >“prepared statement应该只准备一次。重新准备语句可能会影响性能(因为该操作需要网络往返),"。 如果我的概念是正确的,那么从集群中接收已经准备好的语句而
背景:我们正在使用Cassandra来存储一些时间序列数据,并且我们正在使用准备好的语句来访问数据。 我们通过以下方式对表中的数据进行分区: 时间段(如一周或一个月)和 保留策略(如 1 年、5 年或 10 年) 对于不同的表,我们需要为查询、时间段和保留策略的每个组合准备一个不同的语句(仅在使用时),因此我们将有一个爆炸式的预准备语句数量。一些数学: 在客户端,我只能在缓存中保留最常用的PS,但
我已经开始使用DataTax PHP驱动程序学习PHP中的Cassandra,我必须使用准备好的语句在CQL中设置映射的值,查询是: 提交的“属性”是MAP类型,因此我尝试将其作为字符串传递: 在PHP中: 但是我得到了错误“java.lang.IllegalArgumentException”,对于准备好的语句中的映射或列表之类的集合,哪种语法是正确的?
我正试图用Python插入到这个Cassandra表中 有了这份准备好的声明: 使用这段代码(数据库已打开并插入到其他表,因此连接有效): 我捕获了异常:“为 bind() 提供的参数太多(得到 12 个,预期为 4)”。 绑定函数是如何将我的4个参数转换为12个的? 希望有什么办法来解决这个问题? 或者,一些使用卡桑德拉MAP,LIST和SET的工作示例,从Python驱动程序将不胜感激。
我正在为python使用datastax cassandra驱动程序。 有争议的代码部分是: 结果是: 我不确定括号周围的括号来自哪里,一旦我删除了括号,prepare 语句就会起作用。 想法?