Pra*_*nth 1 java cql cassandra nosql datastax
我试图了解PagingState如何与 Cassandra 中的 Statement 配合使用。我尝试使用一个示例,将几千条记录插入到数据库中,并尝试从数据库中读取相同的记录,并将获取大小设置为 10 并使用分页状态。这工作得很好。这是我的示例 junit 代码:
\n\n@Before\npublic void setup() {\n cassandraTemplate.executeQuery("create table if not exists pagesample(a int, b int, c int, primary key(a,b))");\n String insertQuery = "insert into pagesample(a,b,c) values(?,?,?)";\n PreparedStatement insertStmt = cassandraTemplate.getConnection().prepareStatement(insertQuery);\n for(int i=0; i < 5; i++){\n for(int j=100; j<1000; j++){\n cassandraTemplate.executeQuery(insertStmt, new Object[]{i, j, RandomUtils.nextInt()});\n }\n }\n}\n\n@Test\npublic void testPagination() {\n String selectQuery = "select * from pagesample where a=?";\n String pagingStateStr = null;\n for(int run=0; run<90; run++){\n ResultSet resultSet = selectRows(selectQuery, 10, pagingStateStr, 1);\n int fetchedCount = resultSet.getAvailableWithoutFetching();\n System.out.println(run+". Fetched size: "+fetchedCount);\n for(Row row : resultSet){\n System.out.print(row.getInt("b")+", ");\n if(--fetchedCount == 0){\n break;\n }\n }\n System.out.println();\n\n PagingState pagingState = resultSet.getExecutionInfo().getPagingState();\n pagingStateStr = pagingState.toString();\n }\n}\n\npublic ResultSet selectRows(String cql, int fetchSize, String pagingState, Object... bindings){\n SimpleStatement simpleStatement = new SimpleStatement(cql, bindings);\n statement.setFetchSize(fetchSize);\n if(StringUtils.isNotEmpty(pagingState)){\n statement.setPagingState(PagingState.fromString(pagingState));\n }\n return getSession().execute(simpleStatement);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当我执行这个程序时,我发现 testPagination 中的每次迭代都恰好打印 10 条记录。但文档是这样说的:
\n\n我真的无法理解为什么 Cassandra 将返回与获取大小中指定的行数不完全相同的行数。查询中没有提供where子句时是否会出现这种情况?当查询受分区键约束时,它会返回准确的记录数吗?请澄清。
\n