了解Cassandra,使用C/C++驱动程序 我有一个用C++编写的应用程序,它使用DATAXAX C++驱动程序与卡桑德拉通信。

了解Cassandra,使用C/C++驱动程序 我有一个用C++编写的应用程序,它使用DATAXAX C++驱动程序与卡桑德拉通信。,cassandra,datastax,Cassandra,Datastax,我运行了2000万个insert,然后使用50个查询来读取这2000万行。我已将分区键限制为50个不同的可能值,因此行分区的数量最多为50个。此外,每个查询返回大约300000-400000行 我正在跟踪此应用程序不同部分的挂钟时间。下面执行查询并获取结果的代码平均需要3秒钟才能完成,这在我看来是合理的 stopWatch.start() CassFuture* result_future = cass_session_execute(session, statement); if(cass_f

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

我正在跟踪此应用程序不同部分的挂钟时间。下面执行查询并获取结果的代码平均需要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可以迭代大约400000行,但30秒是实现这一点的合理时间吗


或者卡桑德拉的工作方式有什么我不知道的。。。cass_session_execute、cass_future_get_result是否提取与执行的查询相关的所有行并将其返回给客户端?或者它是以一种懒惰的方式来实现的?

驱动程序的Java版本使用分页来获得结果。我想C++版本也一样。另见上文所述。C++现在必须有这个。是的,看。@ SoTiRiOS DelimaNoLi在结果返回时不会遇到超出FUMFMEORION错误,所以结果不是那么大,但是我猜想它们仍然足够大,迭代它们需要30秒。自动分页是否有助于减少迭代时间?从您建议的链接来看,当结果太大而无法放入内存时,自动分页似乎是一种解决方案,但事实并非如此。您可以尝试的一件事是将数据保存在一个文件中,并查看通过网络连接传输该文件所需的时间。当然,Cassandra会有开销,因为它会每页发送一个文件,而不是一次发送一个while文件。