Datastax - PreparedStatement线程安全吗?

use*_*241 7 prepared-statement cassandra datastax-enterprise datastax-java-driver

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

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

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

The*_*heo 8

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

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

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