Cassandra的Datastax Java驱动程序(cassandra-driver-core 2.0.2)支持 PreparedStatements 以及 QueryBuilder API。使用一个优于另一个的任何特定优势?缺点是什么?
上述文档没有说明使用QueryBuilder API而不是PreparedStatements,除了以编程方式编写查询,这不是很有优势(在我的书中)。
请分享您的想法和经验。感谢。
答案 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中使用预先构建的预准备语句。