根据Cassandra文档,使用execute
获取select查询的结果并不能保证返回完整的结果。
ResultSet execute(Statement statement)执行提供的查询。 此方法阻止,直到至少收到一些结果 数据库。但是,对于SELECT查询,它不能保证 结果已全部收到。但它确实保证了一些 已从数据库收到响应,特别是 保证如果请求无效,将抛出异常 通过这种方法。
因此,如果我有一个应该返回查询的完整结果的API,我将如何实现它?现在我创建一个Statement
并使用Session
类的execute方法来获得结果。但是,基于文档似乎并不总是有效。
答案 0 :(得分:3)
文档描述了驱动程序的分页行为。当它表示没有完整检索整个结果时,这意味着协调器还没有完全实现整个结果集。这样做是为了防止在协调器上创建大量对象。
https://docs.datastax.com/en/drivers/java/3.0/com/datastax/driver/core/ResultSet.html
您将看到ResultSet(执行结果)有多种方法。但只有一个all()
将遍历整个结果集并立即将其下载到驱动程序。
如果您使用iterator
,则在迭代器上调用next
时,将从服务器中批量分页结果。这意味着只有部分ResultSet会被一次性下拉到驱动程序,从而减少服务器上的负载,并允许您使用大型数据集而不将其全部拉入ram。