适用于Cassandra的Datastax Java驱动程序(cassandra-driver-core 2.0.2)支持 PreparedStatements 以及 QueryBuilder API。使用一个相对于另一个有什么特别的优势吗?劣势?
文档:http://www.datastax.com/documentation/developer/java-driver/2.0/common/drivers/reference/driverReference_r.html
除了以编程方式编写查询之外,上述文档并未说明使用QueryBuilder API优于PreparedStatements的任何优势,但这并不是什么优点(在我的书中)。
请分享您的想法和经验。谢谢。
最佳答案
PreparedStatements可以提高性能,因为您正在执行的内容已经存储在服务器端(假设您重新使用语句)。您只需绑定(bind)新的具体值并重新执行该语句。
查询构建器是一种创建字符串语句的更简单的方法,无需任何准备即可照原样执行。
从性能的角度来看,第一个选项是最快的,第二个和第三个是相同的:
// below prepared statement has already been prepared, we're now just re-using
PreparedStatement ps = session.prepare("SELECT * FROM users WHERE uname=?");
1) session.execute(ps.bind('david');
2) session.execute("SELECT * FROM users WHERE uname=david");
3) session.exectute(QueryBuilder.select()
.all()
.from("users")
.where(QueryBuilder.eq('uname', 'david'))
不太确定这是否相关,但是有一个很好的示例,可以从使用查询构建器构建的查询的字符串执行迁移到在this ycsb client中使用预先构建的准备好的语句。