Cassandra Java Driver- QueryBuilder API vs PreparedStatements

Datastax Java driver (cassandra-driver-core 2.0.2) for Cassandra 支持 PreparedStatements 以及 QueryBuilder API。使用一个相对于另一个有什么具体优势吗?弊?

文档:http://www.datastax.com/documentation/developer/java-driver/2.0/common/drivers/reference/driverReference_r.html

上面的文档没有说明与使用QueryBuilder API相比,与PredentStatements相比有任何优势,除了以编程方式编写查询之外,这并不是一个很大的优势(在我的书中)。

请分享您的想法和经验。谢谢。


答案 1

PreparedStatements 可以提高性能,因为您正在执行的内容已经存储在服务器端(假设您重用了这些语句)。您只需绑定新的具体值并重新执行语句即可。

查询生成器是一种更花哨的方式,用于创建字符串语句,无需任何准备即可按原样执行。

从性能的角度来看,第一个选项是最快的,第二个和第三个选项是相同的:

// 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'))

不太确定这是否相关,但有一个很好的例子,从使用查询生成器构建的查询的字符串执行迁移到在此ycsb客户端中使用预构建的预准备语句。


答案 2

推荐