我目前正在开发一个需要与 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 实例或客户端上)?
如果我可以在此问题中添加任何内容以使其更适合本网站,请告诉我。这是我的第一个问题。从概念上讲,我明白发生了什么事。但在较低的水平上,我迷失了。网络流量是什么样的以及如何控制它?
您应该使用 @Meta 注释您的查询并指定cursorBatchSize
@Meta(cursorBatchSize = 1000)
Stream<Type> findByValue(String value);
此技巧可确保不会一次性从数据库中获取整个流。