4

服务器和客户端上的语句缓存是否严格按照 PreparedStatement 的字符串再现或其他方式缓存?换句话说,如果两个不同的 PreparedStatement 是通过不同的方式创建的,但最终具有完全相同的 CQL 文本呈现,它们是否都必须准备好(假设相同的服务器)?如果他们来自不同的客户?

更不重要的是......在什么情况下,客户端能够在不咨询服务器的情况下将 PreparedStatement 转换为语句 ID?

(我来自 Oracle 经验,如果有帮助的话。)

4

1 回答 1

4

如果两个不同的 PreparedStatement 是通过不同的方式创建的,但最终具有完全相同的 CQL 文本呈现,它们是否都必须准备好(假设相同的服务器)?如果他们来自不同的客户?

从不同的客户端执行相同的语句
刚刚对此进行了测试,两个客户端执行相同的准备语句两次,cql 语句缓存o.a.c.cql3.QueryProcessor#preparedStatements最终存储了 2 条语句,即使它们的字符串呈现相同,这意味着不同客户端的 PreparedStatements 被缓存。

从同一个客户端执行相同的语句来自
单个客户端的重复语句不会被缓存两次,因此它们可以被重用并且不必重新编译,当客户端执行相同的准备好的语句时,它只发送语句 id 和参数。

于 2014-02-11T10:09:53.230 回答