Java 在应用程序中执行一个db请求并处理数据,还是在多个查询中从db获取数据更好

Java 在应用程序中执行一个db请求并处理数据,还是在多个查询中从db获取数据更好,java,sql,postgresql,java-8,Java,Sql,Postgresql,Java 8,我有大约100个不同类型的库存,保存在db中,用于一个属性 有这样的代码更好吗 List<Inventory> type1s = inventoryRepo.findByPropertyIdAndType(propertyId, Type1); List<Inventory> type2s = inventoryRepo.findByPropertyIdAndType(propertyId, Type2); Map<InventoryType, List<In

我有大约100个不同类型的库存,保存在db中,用于一个属性 有这样的代码更好吗

List<Inventory> type1s = inventoryRepo.findByPropertyIdAndType(propertyId, Type1);
List<Inventory> type2s = inventoryRepo.findByPropertyIdAndType(propertyId, Type2);
Map<InventoryType, List<Inventory>> typeListMap = new HashMap<>();
typeListMap.put(Type1, type1s);
typeListMap.put(Type2, type2s);

注:DB为postgresql。
我认为第二种方法更好,按照min db调用的规则。但是我是否遗漏了需要考虑的其他一些关键方面呢?

如果您立即从数据库中获取数据,然后在应用程序中处理它,那就更好了,因为如果您进行扩展,最好减少数据库上的负载。

因为这些问题总是存在,答案是-这取决于具体情况

如果没有太多的数据需要处理,那么单次往返将是最佳选择

另一方面,当数据量增加时,会出现以下问题:

应用程序内存可能不足,可能引发OutOfMemoryError

数据库可能没有响应,因为它必须处理代价高昂的查询


在这种情况下,批处理通常是最合理的方法。

在某种程度上,最快的方法是一次收集所有数据。在这一点之上,最好将数据分为块,比如说,每次10K行

这取决于您发现最佳分割点,以及最佳块大小


我想不出任何一种情况下,一次选择一行会更快。

那么你是说一次查询千兆字节的数据不会增加数据库的负载?我的意思是最好在应用程序中处理数据,而不是增加数据库的负载,但正如你所说,这取决于类型,所以我想你的答案很好。
List<Inventory> inventories = inventoryRepo.findByPropertyIdAndTypeIn(propertyId
        , Arrays.asList(Type1, Type2));
Map<InventoryType, List<Inventory>> typeListMap = inventories.stream().collect(
        Collectors.groupingBy(Inventory::getType, Collectors.toList()));