服务器和客户端上的语句缓存是否严格按照 PreparedStatement 的字符串再现或其他方式缓存?换句话说,如果两个不同的 PreparedStatement 是通过不同的方式创建的,但最终具有完全相同的 CQL 文本呈现,它们是否都必须准备好(假设相同的服务器)?如果他们来自不同的客户?
更不重要的是......在什么情况下,客户端能够在不咨询服务器的情况下将 PreparedStatement 转换为语句 ID?
(我来自 Oracle 经验,如果有帮助的话。)
服务器和客户端上的语句缓存是否严格按照 PreparedStatement 的字符串再现或其他方式缓存?换句话说,如果两个不同的 PreparedStatement 是通过不同的方式创建的,但最终具有完全相同的 CQL 文本呈现,它们是否都必须准备好(假设相同的服务器)?如果他们来自不同的客户?
更不重要的是......在什么情况下,客户端能够在不咨询服务器的情况下将 PreparedStatement 转换为语句 ID?
(我来自 Oracle 经验,如果有帮助的话。)
如果两个不同的 PreparedStatement 是通过不同的方式创建的,但最终具有完全相同的 CQL 文本呈现,它们是否都必须准备好(假设相同的服务器)?如果他们来自不同的客户?
从不同的客户端执行相同的语句
刚刚对此进行了测试,两个客户端执行相同的准备语句两次,cql 语句缓存o.a.c.cql3.QueryProcessor#preparedStatements
最终存储了 2 条语句,即使它们的字符串呈现相同,这意味着不同客户端的 PreparedStatements 被缓存。
从同一个客户端执行相同的语句来自
单个客户端的重复语句不会被缓存两次,因此它们可以被重用并且不必重新编译,当客户端执行相同的准备好的语句时,它只发送语句 id 和参数。