适用于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中使用预先构建的准备好的语句。

07-26 08:34