Cassandra分页中每页记录数的限制

Cassandra分页中每页记录数的限制,cassandra,pagination,spring-data-cassandra,Cassandra,Pagination,Spring Data Cassandra,我使用CassandraPageRequest根据页面大小获取数据 这是我的密码: public CassandraPage<CustomerEntity> getCustomer(int limit, String pagingState) { final CassandraPageRequest cassandraPageRequest = createCassandraPageRequest(limit, pagingState);

我使用CassandraPageRequest根据页面大小获取数据

这是我的密码:

    public CassandraPage<CustomerEntity> getCustomer(int limit, String pagingState)
    {
        final CassandraPageRequest cassandraPageRequest = createCassandraPageRequest(limit, pagingState);
        return getPageOfCustomer(cassandraPageRequest);
    }

    private CassandraPage<CustomerEntity> getPageOfCustomer(final CassandraPageRequest cassandraPageRequest) {
        final Slice<CustomerEntity> recordSlice = CustomerPaginationRepository.findAll(cassandraPageRequest);
        return new CassandraPage<>(recordSlice);
    }

    private CassandraPageRequest createCassandraPageRequest(final Integer limit, final String pagingState) {
        final PageRequest pageRequest = PageRequest.of(0, limit);
        final PagingState pageState = pagingState != null ? PagingState.fromString(pagingState) : null;
        return CassandraPageRequest.of(pageRequest, pageState);
    }
public CassandraPage getCustomer(整数限制,字符串分页状态)
{
最终CassandraPageRequest CassandraPageRequest=创建CassandraPageRequest(限制,分页状态);
返回客户的getPageOfCustomer(cassandraPageRequest);
}
private CassandraPage getPageOfCustomer(最终CassandraPageRequest CassandraPageRequest){
final Slice recordSlice=CustomerPaginationRepository.findAll(cassandraPageRequest);
返回新的CassandraPage(recordSlice);
}
私有CassandraPageRequest createCassandraPageRequest(最终整数限制,最终字符串分页状态){
final PageRequest PageRequest=PageRequest.of(0,限制);
最终分页状态pageState=PagingState!=null?PagingState.fromString(PagingState):null;
返回CassandraPageRequest.of(页面请求,页面状态);
}

这个很好用。不过,我想知道关于“每页记录数”的建议。当我给1000作为上限时,它可以正常工作。建议我们是否可以给出10000或更多的限制。

我在锡拉银行工作-锡拉是一个与卡桑德拉兼容的数据库

几年前,我做了一个实验,研究页面大小和行大小对cassandra分页的影响

我发现需要以字节为单位返回的信息总量才是真正重要的。如果你有非常大的行-甚至1000到更多,如果你有小行10000应该是好的

应考虑的其他因素包括:

  • 数据中的墓碑数量-在搜索实时数据的查询中,必须读取和跳过墓碑。如果有许多墓碑,将导致cassandra(和scylla)在搜索下一个实时行时进行更多的工作
  • 查询类型是在多个分区上进行范围扫描还是在单个分区上进行范围扫描?在多个分区上进行扫描可能更难填充数据(尤其是在有大量墓碑的情况下)
  • 超时-通过增加页面大小-cassandra必须搜索更多行,如果读取超时/范围扫描超时值较低,则查询可能会超时
请注意,Scylla已经不再需要用户优化页面大小——它将把您的查询限制为1MB数据/行的页面大小

您可以找到完整的幻灯片/会话搜索“规划您的查询以获得最佳性能”,这是一个古老但仍然适用的功能(在Scylla中,我们有更多的优化:)