cassandra - PreparedStatements 是否由 CQL 字符串缓存? Datastax PreparedStatement 是否保留语句 ID?

标签 cassandra prepared-statement cassandra-2.0

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

更不重要的是......在什么条件下客户端能够从 PreparedStatement 转换为语句 ID,而无需咨询服务器?

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

最佳答案

if two different PreparedStatements are created by different means, but end up having exactly the same CQL textual rendering, will they both have to be prepared (assuming the same server)? If they come from different clients?



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

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

关于cassandra - PreparedStatements 是否由 CQL 字符串缓存? Datastax PreparedStatement 是否保留语句 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21484624/

相关文章:

python - 酸洗错误运行 COPY 命令 : CQLShell on Windows

java - 如何防止 Cassandra 的数据流读取并行度降低

cassandra - 当我更新列时 SSTable 会发生变化吗?

Cassandra 节点硬件要求

database-design - 没有 WHERE 的 SELECT 的 CQL 设计

java - 用于存储数据库数据的 ResultSet 替代方案

java - 如何使用sql的准备语句?

java - 带有 IN 子句中参数列表的 PreparedStatement

java - Cassandra删除操作有时无法正常工作,删除后无法选择数据

java - 在 Coldfusion 中使用 Apache Cassandra