在slick操作中使用scala集合等价物有害吗?

68bkxrlz  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(212)

我有table table_a 以及 table_b 在我的数据库中,它们在slick中Map为tablequery对象。我需要从 table_atable_b .
让表查询对象 tableQueryA 以及 tableQueryB . 过滤和复制数据的逻辑很复杂。因此,我考虑在for yield中使用scala collection等效于表查询对象,并将它们视为普通集合。但一切都发生在一次交易中。代码看起来像这样。

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

这样做是否有害,即作为scala集合处理并处理它们?我用的是slick 3.2

xxe27gdn

xxe27gdn1#

分别做两件事 tableQueryX.filter().result ,您将对数据库执行两个单独的查询。可以将其替换为一个连接两个表的查询。
就性能而言,很难说什么是更好的方法,因为这取决于 filter 或者 where 子句以及数据库使用什么样的索引来实现这些。如果您需要一流的性能,请尝试这两种方法并选择一种最快的方法。
如果两个查询都产生大量数据,那么还需要考虑应用程序的内存使用情况,因为所有数据都是在scala collection api使用之前加载的。

szqfcxe2

szqfcxe22#

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

相关问题