Cassandra Java Driver- QueryBuilder API与PreparedStatements

时间:2014-07-24 03:47:43

标签: java cassandra prepared-statement cassandra-2.0 datastax-java-driver

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,除了以编程方式编写查询,这不是很有优势(在我的书中)。

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

1 个答案:

答案 0 :(得分:20)

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

不太确定这是否相关,但是有一个很好的示例,即从使用查询构建器构建的查询的字符串执行迁移到this ycsb client中使用预先构建的预准备语句。