Cassandra准备声明

30byixjq  于 10个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(53)

Cassandra:当Cassandra为解析的语句分配id时,如果相同的语句被发送到不同的Cassandra节点,或者相同的语句来自不同的微服务,它会分配一个新的id吗?
尝试搜索Cassandra官方文档,但没有找到任何内容。

aurhwmvo

aurhwmvo1#

不确定您使用的是哪种语言,但幸运的是,驱动程序在这方面进行了类似的设计。
因此有两个预处理语句缓存。一个在集群本身中,由驱动程序保持同步。当运行预准备语句时,驱动程序在一个节点上尝试它。如果该节点成功,则会在群集中的其余节点上进行准备。
当最初准备好一条语句时,它首先被发送到集群中的单个节点(这避免了在查询字符串错误的情况下命中所有节点)。一旦该节点成功应答,驱动程序将在所有剩余节点上重新准备。
这样,使用该准备好的语句ID的任何未来请求都将匹配,而不管哪个节点处理初始准备。
还是同一个语句来自不同的微服务?
所以驱动程序也有一个准备好的语句缓存。显然,不同的微服务将拥有自己的驱动程序示例,而这些驱动程序缓存不会匹配。不过……
准备好的语句标识符是确定性的(它是查询字符串的散列),因此对于所有节点都是相同的。
同样,来自不同应用程序的相同查询 * 应该 * 匹配。因此,不同的微服务确实可以在Cassandra端缓存中共享准备好的语句。
Driver 4.17.0 Java Doc参考:https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/statements/prepared/

相关问题