在光滑操作中使用scala集合等效物是否有害?

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

我在我的数据库中有表table_atable_b,它们与TableQuery Objects一起映射。我需要将一组受限制的数据从table_a复制到table_b

让表查询对象为tableQueryAtableQueryB。过滤和复制数据的逻辑很复杂。因此,我认为在for yield中将scala集合等效于表查询对象,并将它们视为普通集合。但是一切都发生在一次交易中。代码看起来像这样。

for {
    collA <- tableQueryA.filter(.....something....).result
    collB <- tableQueryB.filter(.....somethingElse.....).result
    ...... do something with collA and collB
    }
 yield ...something

以这种方式存在伤害,即处理为scala集合并处理它们吗?我使用的是光滑的3.2

mysql database scala collections slick
2个回答
1
投票

通过执行两个单独的tableQueryX.filter().result,您将对数据库执行两个单独的查询。您可以将其替换为一个连接两个表的查询。

很难说在性能方面什么是更好的方法,因为它取决于filterwhere子句的数量以及数据库使用什么样的索引来实现这些。如果您需要一流的性能,请尝试两种方法并选择最快的方法。

如果两个查询都产生大量数据,则还需要考虑应用程序的内存使用情况,因为在使用scala collection api之前加载了所有数据。


0
投票

只要数据较少,我就不会看到任何伤害 - 但最好是在数据库级别过滤数据以避免任何潜在的内存错误。

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