Datastax - PreparedStatement是否线程安全?

7

在应用程序中,com.datastax.driver.core.PreparedStatement实例是否应该是单例?

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

除了在同一方法中准备和执行之外,PreparedStatement使用的简单示例将非常出色!

1个回答

8

PreparedStatement对象是线程安全的。您可以对其进行更改(例如设置默认一致性级别),但如果多个线程同时这样做可能导致不一致性。

准备语句基本上是ID和元数据的包装器,服务器将保存准备语句的时间尽可能长(但节点崩溃或重新启动意味着它被丢失并且必须重新准备)。理论上,预处理语句可以在其他地方序列化和反序列化后仍然工作,但我不建议这样做。

准备语句只能在节点中使用,并且如上所述,在重新启动时无法保留,因此,如果要继续使用它们,请确保在连接失败或节点重新启动时清除它们。 我会尝试以与连接相同的方式进行范围限定,以便在连接和重连时重新创建它们。也许不是很好的建议,但它非常取决于您的应用程序结构。


1
我认为预处理语句不仅适用于节点,而且它们在整个Cassandra集群中共享。 - pinkpanther

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接