【问题标题】:Is the usage of scala collection equivalents in slick operation is harmful?在 slick 操作中使用 scala 集合等价物是否有害?
【发布时间】:2019-07-15 01:03:39
【问题描述】:

我的数据库中有table_atable_b 表,它们通过TableQuery 对象进行了巧妙的映射。我需要将一组受限数据从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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      只要数据较少,我认为没有任何危害 - 但最好在数据库级别过滤掉数据以避免任何潜在的内存不足错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-29
        • 2011-10-03
        • 2019-02-09
        • 1970-01-01
        • 2018-08-26
        • 1970-01-01
        • 2011-07-29
        • 2013-06-21
        相关资源
        最近更新 更多