Java BoundStatement真的比Cassandra中的SimpleStatement更有效吗?
我分别使用SimpleStatement和BoundStatement从Cassandra中选择数据100次。Java BoundStatement真的比Cassandra中的SimpleStatement更有效吗?,java,cassandra-3.0,Java,Cassandra 3.0,我分别使用SimpleStatement和BoundStatement从Cassandra中选择数据100次。 我发现我的成绩没有太大提高 然而,他说: SimpleStatement:直接从字符串构建的简单实现。通常用于只执行一次或几次的查询。 BoundStatement:通过将值绑定到准备好的语句来获得。通常用于经常使用不同值执行的查询 在我的例子中,为什么SimpleStatement和BoundStatement的效率几乎相同 long start0 = System.curr
我发现我的成绩没有太大提高 然而,他说: SimpleStatement:直接从字符串构建的简单实现。通常用于只执行一次或几次的查询。
BoundStatement:通过将值绑定到准备好的语句来获得。通常用于经常使用不同值执行的查询 在我的例子中,为什么SimpleStatement和BoundStatement的效率几乎相同
long start0 = System.currentTimeMillis();
long start;
DataEntity mc = null;
ResultSet results = null;
BoundStatement bs = null;
PK pk = null;
CassandraData dao = new CassandraData();
long end;
Session session = dao.getSession();
//SimpleStatement ss = new SimpleStatement("select * from test where E='"+pk.E+"' and D="+pk.D+" and M="+pk.M);
PreparedStatement prepared = session.prepare(
"select * from test where E=? and D=? and M=?");
for (int i = 0; i < 100; i++) {
start = System.currentTimeMillis();
pk = ValidData.getOnePk();
//results = session.execute(ss);
bs = prepared.bind(pk.E, pk.D, pk.M);
results = session.execute(bs);
end = System.currentTimeMillis();
logger.info("Show One:" + (end - start) / 1000.0 + "s elapsed.");
}
long end0 = System.currentTimeMillis();
logger.info("Show All:" + (end0 - start0) / 1000.0 + "s elapsed.");
long start0=System.currentTimeMillis();
长起点;
DataEntity mc=null;
ResultSet results=null;
bounds=null;
PK=null;
CassandraData dao=新的CassandraData();
长端;
Session Session=dao.getSession();
//SimpleStatement ss=新SimpleStatement(“从测试中选择*,其中E=”“+pk.E+”,D=“+pk.D+”和M=“+pk.M”);
PreparedStatement prepared=session.prepare(
“从测试中选择*,其中E=?和D=?和M=?”;
对于(int i=0;i<100;i++){
start=System.currentTimeMillis();
pk=ValidData.getOnePk();
//结果=session.execute(ss);
bs=制备的结合物(pk.E,pk.D,pk.M);
结果=session.execute(bs);
end=System.currentTimeMillis();
info(“Show One:”+(结束-开始)/1000.0+“s已过”);
}
long-end0=System.currentTimeMillis();
logger.info(“全部显示:”+(end0-start0)/1000.0+“s已过”);
这是因为您的迭代次数太少了。100不足以看出区别
但最终他们都做了同样的工作,除了一句简单的话:
- 只有一次到Cassandra节点的行程
- 不会将任何准备好的语句存储在节点内存中