java - 如何使用 Spring Data Cassandra 从 cassandra 数据库中读取超过百万条记录并使用 Spring Batch 将其写入文件?
问题描述
我需要使用 Spring Data Cassandra 从 Cassandra 数据库中读取超过一百万条记录,并使用 Spring Batch 将其写入文件。现在我正在使用 Spring data Cassandra 的分页功能,但它似乎正在执行select * from table
然后过滤记录。这可能不是一个好的选择,因为该表将有超过一百万条记录,并且一次将它们全部加载到内存中会很糟糕。
我还需要将它与 Spring Batch 集成,以便我能够将每条记录正确地放入一个文件中。我正在寻找一种从 Cassandra 读取数据并将其分块保存在文件中的方法。最好的方法是什么?
这是我用来使用分页从 Cassandra 获取记录的代码:
public void startJob() {
Pageable pageable = PageRequest.of(0, pageSize);
Slice<FLProductATPEntity> slice = repository.findAll(pageable);
List<FLProductATPEntity> entityList;
if (slice.hasContent()) {
entityList = slice.getContent();
entityList.forEach(entity -> log.info("Entity: {}", entity));
}
while (slice.hasNext()) {
slice = repository.findAll(slice.nextPageable());
entityList = slice.getContent();
entityList.forEach(entity -> log.info("Entity: {}", entity));
}
}
解决方案
我正在寻找一种从 Cassandra 读取数据并将其分块保存在文件中的方法
Spring Batch 提供了RepositoryItemReader,您可以将其与您的 cassandra 一起PagingAndSortingRepository
用作委托。因此,您可以使用此阅读器创建面向块的步骤,并将FlatFileItemWriter
数据写入文件。
推荐阅读
- netsuite - 保存的搜索条件 HTML 格式
- express - 无法将 Mongoose find() 渲染到 EJS
- docker - 如何验证从 docker-compose 构建的 docker 镜像的有效性?
- php - PHP:将数组转换为索引数组
- database - MS Access 表单只读
- vue.js - GSAP 无法使用 vue Nuxt.js 导入模块
- linear-programming - ZIMPL:约束中无法识别二维变量声明
- biginteger - 在java中将反转数组转换为java.math.Biginteger
- python - Pandas `to_csv` 字符串列已转换
- python - 在python中逐行合并几个文本文件