【问题标题】:Limit on number of records per page in Cassandra paginationCassandra分页中每页记录数的限制
【发布时间】:2021-08-07 15:21:23
【问题描述】:

我正在使用 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);
    }

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

【问题讨论】:

    标签: cassandra pagination spring-data-cassandra


    【解决方案1】:

    我在 ScyllaDB 工作 - Scylla 是与 Cassandra 兼容的数据库。

    几年前我进行了一项关于页面大小和行大小对 cassandra 分页的影响的实验。

    我发现需要以字节为单位返回的信息总量才是真正重要的项目。如果你有非常大的行 - 甚至 1000 可能很多,如果你有小行 10000 应该没问题。

    应考虑的其他因素是:

    • 数据中的墓碑数量 - 在搜索实时数据的查询中必须读取和跳过墓碑,其中许多墓碑会导致 cassandra(和 scylla)在搜索下一个实时行时做更多工作。
    • 查询类型是对多个分区还是单个分区进行范围扫描 - 对多个分区进行扫描可能更难填充数据(尤其是在大量墓碑的情况下)。
    • 超时 - 通过增加页面大小 - cassandra 将不得不搜索更多行,如果读取超时/范围扫描超时值较低,则查询可能会超时。

    请注意,Scylla 已不再需要其用户优化页面大小 - 它将您的查询限制为 1MB 的数据/行的页面大小。

    您可以找到完整的幻灯片/会话搜索“规划您的查询以获得最大性能”它是旧的但仍然存在(在 Scylla 我们有更多优化:))。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-25
      • 2023-04-09
      • 2021-06-11
      • 2021-12-12
      • 2018-04-19
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多