我目前正在使用Cassandra 2的Datastax Cassandra驱动程序来执行cql3。这可以正常工作。我开始使用PreparedStatement's
:
Session session = sessionProvider.getSession();
try {
PreparedStatement ps = session.prepare(cql);
ResultSet rs = session.execute(ps.bind(objects));
if (irsr != null) {
irsr.read(rs);
}
}
有时我会在日志中从驱动程序得到警告:
Re-preparing already prepared query . Please note that preparing the same query more than once is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once.
此警告是有道理的,但我不确定如何重用PreparedStatement
?
我是否应该只PreparedStatement
在构造函数/ init方法中创建所有我的函数,而不是简单地使用它们?
但是,当多个线程同时使用同一线程PreparedStatement
时(尤其是调用PreparedStatement.bind()
绑定对象),这样做是否很好?
您可以只初始化一次PreparedStatement,然后在应用程序运行时对其进行缓存。只要Cassandra群集启动,它就应该可用。
使用多个线程中的语句很好(只要您不通过setXXX()
方法修改它即可)。当您调用bind()时,下面的代码仅读取PreparedStatement,然后创建BoundStatement()的新实例,然后调用者线程可以随意对其进行突变。
如果您有好奇心,请查看以下源代码(搜索bind()
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句