是否可以根据条件查询Cassandra中的所有记录?

时间:2019-07-23 17:20:33

标签: list collections cassandra resultset

我有一个表,其中包含用户记录列表。我需要根据某些条件查询所有记录。用例是我的用户表中有大约3000万条记录,我的条件将匹配300万条。

我经过https://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause,但是找不到任何真正的解决方案。

是否甚至可以根据条件查询Cassandra表?

我需要像传统的rdbms或文档存储一样查询和分页记录。

1 个答案:

答案 0 :(得分:1)

Cassandra具有分页的概念,您可以在其中指定获取大小,然后逐页对其进行迭代。如果您使用Datastax Java驱动程序查询数据,则以下代码。但是其他语言也应该有类似的东西。

final int RESULTS_PER_PAGE = 100;

Statement st = new SimpleStatement("your query");
st.setFetchSize(RESULTS_PER_PAGE);

String requestedPage = extractPagingStateStringFromURL();
// This will be absent for the first page
if (requestedPage != null) {
    st.setPagingState(
        PagingState.fromString(requestedPage));
}

ResultSet rs = session.execute(st);
PagingState nextPage = rs.getExecutionInfo().getPagingState();

// Note that we don't rely on RESULTS_PER_PAGE, since Cassandra might
// have not respected it, or we might be at the end of the result set
int remaining = rs.getAvailableWithoutFetching();
for (Row row : rs) {
    renderInResponse(row);
    if (--remaining == 0) {
        break;
    }
}

// This will be null if there are no more pages
if (nextPage != null) {
    renderNextPageLink(nextPage.toString());
}

更多详细信息,请参见here