【问题标题】:Are PreparedStatements cached by CQL string? Does Datastax PreparedStatement retain statement ID?PreparedStatements 是否由 CQL 字符串缓存? Datastax PreparedStatement 是否保留语句 ID?
【发布时间】:2014-01-31 16:08:19
【问题描述】:
服务器端和客户端的语句缓存是严格按照 PreparedStatement 的字符串呈现方式缓存的,还是其他的?换句话说,如果两个不同的 PreparedStatement 是通过不同的方式创建的,但最终具有完全相同的 CQL 文本呈现,它们是否都必须准备好(假设相同的服务器)?如果他们来自不同的客户?
更不重要的是......在什么情况下客户端能够在不咨询服务器的情况下将 PreparedStatement 转换为语句 ID?
(我来自 Oracle 经验,如果有帮助的话。)
【问题讨论】:
标签:
cassandra
prepared-statement
cassandra-2.0
【解决方案1】:
如果两个不同的 PreparedStatement 是通过不同的方式创建的,
但最终会得到完全相同的 CQL 文本渲染,他们会吗?
两者都必须准备好(假设同一台服务器)?如果他们来自
不同的客户?
从不同的客户端执行相同的语句
刚刚对此进行了测试,两个客户端两次执行相同的预处理语句,o.a.c.cql3.QueryProcessor#preparedStatements 中的 cql 语句缓存最终存储了 2 条语句,即使它们的字符串呈现相同,这意味着缓存了不同客户端的 PreparedStatements。
从同一个客户端执行同一个语句
来自单个客户端的重复语句不会被缓存两次,因此它们可以被重用并且不必重新编译,当客户端执行相同的准备好的语句时,它只发送语句 id 和参数。