Datastax - PreparedStatement线程安全吗?

时间:2013-05-11 16:23:53

标签: cassandra prepared-statement datastax-enterprise datastax-java-driver

com.datastax.driver.core.PreparedStatement实例应该是应用程序中的单例吗?

如果是这样,如果连接丢失会发生什么? PreparedStatement是否无效并且必须采取手动操作来“重新制定”?

PreparedStatement用法的一个简单示例(除了准备+在同一方法中执行)将是辉煌的!

1 个答案:

答案 0 :(得分:8)

PreparedStatement对象是线程安全的。您可以改变它们(例如,设置默认一致性级别),如果多个线程同时执行此操作,可能会导致不一致,但这是另一回事。

预准备语句基本上是围绕ID和元数据的包装器,并且服务器将保留准备好的语句,只要它已经启动(但是节点崩溃或重新启动将意味着它丢失并且必须重新编写)。从理论上讲,准备好的语句可以在其他地方序列化和反序列化,但仍然有效,我不推荐它。

准备语句是节点的本地语句,正如我所提到的,不会在重新启动后继续存在,所以如果你要保留它们,你需要确保在连接失败或节点重启时清除它们。我会尝试以与连接范围相同的方式对它们进行范围调整,在连接和重新连接时重新创建它们。也许不是很好的建议,但这在很大程度上取决于您的应用程序的结构。