我有一个表,其中包含用户记录列表。我需要根据某些条件查询所有记录。用例是我的用户表中有大约3000万条记录,我的条件将匹配300万条。
我经过https://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause,但是找不到任何真正的解决方案。
是否甚至可以根据条件查询Cassandra表?
我需要像传统的rdbms或文档存储一样查询和分页记录。
答案 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。