Spring Data MongoRepository Streams 的内存使用情况

问题描述 投票:0回答:1

我目前正在开发一个需要与 MongoDB 实例交互的 Spring Boot 应用程序。我的一个查询可能会返回大量数据。我不想立即撤回所有这些数据。根据我目前的理解,我可以在

Stream<Type>
中指定
MongoRepository
的返回类型,如下所示:

@Repository
public interface TypeRepository extends MongoRepository<Type, TypeId> {
    Stream<Type> findByValue(String value);
}

然后在服务方法中,执行如下操作:

Stream<Type> typeStream = typeRepository.findByValue("value");
typeStream.forEach(t -> {
    //do some stuff
});

在这个例子中,内存中一次实际有多少数据?我在理解其幕后工作原理时遇到了一些困难。是否有一个批量大小来控制一次发回的数据量?如何配置(在 MongoDB 实例或客户端上)?

如果我可以在此问题中添加任何内容以使其更适合本网站,请告诉我。这是我的第一个问题。从概念上讲,我明白发生了什么事。但在较低的水平上,我迷失了。网络流量是什么样的以及如何控制它?

java mongodb java-stream heap-memory spring-data-mongodb
1个回答
0
投票

您应该使用 @Meta 注释您的查询并指定cursorBatchSize

@Meta(cursorBatchSize = 1000)
Stream<Type> findByValue(String value);

此技巧可确保不会一次性从数据库中获取整个流。

© www.soinside.com 2019 - 2024. All rights reserved.