Cassandra Java驱动程序-QueryBuilder API与PreparedStatements

Cassandra Java驱动程序-QueryBuilder API与PreparedStatements,java,cassandra,prepared-statement,cassandra-2.0,datastax-java-driver,Java,Cassandra,Prepared Statement,Cassandra 2.0,Datastax Java Driver,cassandra的Datastax Java驱动程序(cassandra driver core 2.0.2)支持PreparedStatements以及QueryBuilderAPI。使用其中一个比另一个有什么特殊的优势?缺点 文件: 上面的文档没有说明与使用QueryBuilderAPI相比PreparedStatements的任何优势,除了以编程方式编写查询之外,这并不是什么优势(在我的书中) 请分享你的想法和经验。谢谢。PreparedStatements为您提供了性能提升,因为您正在

cassandra的Datastax Java驱动程序(cassandra driver core 2.0.2)支持PreparedStatements以及QueryBuilderAPI。使用其中一个比另一个有什么特殊的优势?缺点

文件:

上面的文档没有说明与使用QueryBuilderAPI相比PreparedStatements的任何优势,除了以编程方式编写查询之外,这并不是什么优势(在我的书中)


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

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

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

注意,您可以从
QueryBuilder
链创建
PreparedStatement
对象,因此从
QueryBuilder
移动到
PreparedStatement