Igo*_*tov 4 prepared-statement cassandra node.js
在架构中添加一对列后,我想通过它们选择它们select *.而是select *返回旧的列集,而不是新的.
通过文档推荐,我使用{prepare:true}来平滑JavaScript浮点数和Cassandra ints/bigints的区别(我真的不需要这里准备好的语句,它只是解决了这个ResponseError:预期4或0字节的int问题和我也不想打扰自己query hints).
所以在第一次执行时,select *我有3列.在此之后,我向架构添加了2列.select *如果使用的话仍然返回3列,如果{prepare: true}没有它则使用5列.
我希望有一种方法可靠地刷新此缓存或在每个应用程序启动时生成cassandra驱动程序准备语句.
我不认为重新启动数据库集群是一种可靠的方法.
这实际上是Cassandra中的一个问题,已在2.1.3(CASSANDRA-7910)中修复.问题是在架构更新时,准备好的语句不会从Cassandra端的缓存中逐出.如果你运行的是一个小于2.1.3的版本(这可能是自上周发布2.1.3以来),除非你创建另一个稍微不同的单独的预准备语句(如额外的),否则实际上没有办法解决这个问题.空格或某些东西,以引起一个单独的独特声明).
当使用2.1.3运行并更改表模式时,C*将正确地从缓存中逐出相关的预准备语句,当驱动程序使用该语句发送另一个查询时,Cassandra将以"UNPREPARED"消息响应,这应该引发nodejs驱动程序重新映射查询并为您重新发送请求.
在Node.js驱动程序上,您可以以编程方式清除准备好的语句元数据:
client.metadata.clearPrepared();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |