【发布时间】:2017-01-24 03:59:07
【问题描述】:
This link 说:
BoundStatement:通过将值绑定到准备好的语句获得。通常用于经常执行的查询,具有不同的值。
BuiltStatement:使用 QueryBuilder DSL 构建的语句。它可以像简单的语句一样直接执行,也可以准备。
所以在我看来,BuiltStatement 等于 BoundStatement。 但是,就我而言,我发现 BuiltStatement 显然比 BoundStatement 更有效。为什么会这样?
public static void main(String[] args) {
Data mc = null;
ResultSet results = null;
PK pk = null;
CassandraData dao = new CassandraData();
Session session = dao.getSession();
long start, end;
long start0 = System.currentTimeMillis();
// PreparedStatement prepared = session.prepare(
// "select * from test where E=? and D=? and M=?");
Statement statement = null;
logger.info("Start:");
for (int i = 0; i < 100; i++) {
pk = ValidData.getOnePk();
start = System.currentTimeMillis();
// statement = prepared.bind(pk.E, pk.D, pk.M);
// statement.setReadTimeoutMillis(100000);
statement = getSelect(pk);
results = session.execute(statement);
end = System.currentTimeMillis();
logger.info("Show OneKb:" + (end - start) / 1000.0 + "s.");
}
long end0 = System.currentTimeMillis();
logger.info("Show OneKb Average:" + (end0 - start0) / 1000.0 / 100 + "s/OneKb.");
}
private static Statement getSelect(PK pk) {
Select ss = QueryBuilder.select().from("test");
ss.setConsistencyLevel(com.datastax.driver.core.ConsistencyLevel.ONE);
ss.where(QueryBuilder.eq("E", pk.E))
.and(QueryBuilder.eq("D", pk.D))
.and(QueryBuilder.eq("M", pk.M)).limit(1)
.setReadTimeoutMillis(100 * 1000);
return ss;
}
我跑了这个案例100次,BoundStatement的平均时间是1.316s,BuiltStatement的平均时间是0.199s。
【问题讨论】:
标签: java cassandra-3.0