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

时间:2019-02-21 07:37:21

标签: mysql database scala collections slick

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

让表查询对象为tableQueryAtableQueryB。过滤和复制数据的逻辑很复杂。所以 我想做一个等同于表查询对象的scala集合以获取收益,并将其视为普通集合。但是,一切都在一次交易中发生。代码看起来像这样。

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

这种方式是否有害,即作为scala集合进行处理并对其进行处理? 我正在使用光滑3.2

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

只要数据较少,我看不出有什么害处-但最好在数据库级别过滤掉数据,以避免任何潜在的内存不足错误。