使用C / C ++驱动程序了解Cassandra

时间:2015-09-17 20:34:50

标签: cassandra datastax

我有一个用C ++编写的应用程序,它使用DataStax C ++驱动程序与Cassandra进行通信。

我运行了2000万个插入,然后使用50个查询来读取这2000万行。我将分区键限制为50个不同的可能值,因此行分区的数量最多为50.此外,每个查询返回大约300,000 - 400,000行。

我正在跟踪此应用程序不同部分的挂钟时间。以下执行查询并获取结果的代码平均需要3秒才能完成,这对我来说似乎是合理的。

stopWatch.start()
CassFuture* result_future = cass_session_execute(session, statement);
if(cass_future_error_code(result_future) == CASS_OK) {
  const CassResult* result = cass_future_get_result(result_future);
}
stopWatch.stop()

但是,迭代遍历行的下面一段代码平均需要大约30秒!

resWatch.start();
CassIterator* rows = cass_iterator_from_result(result);

while(cass_iterator_next(rows)) {
     const CassRow* row = cass_iterator_get_row(rows);
     BAEL_LOG_INFO << "got a row " << BAEL_LOG_END;
}
resWatch.stop();

我意识到CassIterator可能会迭代大约400,000行,但是在合理的时间内是30秒才能达到这个目标?!

或者是否有一些我对Cassandra功能的方式缺失... cass_session_execute()cass_future_get_result()没有获取与执行的查询相关的所有行并将其返回给客户端?或者是以懒惰的方式做到了?

0 个答案:

没有答案