Вредно ли использование эквивалентов коллекции scala в скользких операциях? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть таблицы table_a и table_b в моей базе данных, и они отображаются с помощью TableQuery Objects.Мне нужно скопировать ограниченный набор данных из table_a в table_b.

Пусть объектами запроса таблицы будут tableQueryA и tableQueryB.Логика фильтрации и копирования данных сложна.Поэтому я подумываю о том, чтобы сделать эквивалент коллекции scala объекта запроса таблицы в for yield и рассматривать их как обычные коллекции.Но все происходит за одну транзакцию.Код выглядит примерно так:

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

Есть ли вред, если вы поступаете таким образом, то есть обрабатываете как коллекции scala и обрабатываете их?Я использую пятно 3,2

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Я не вижу никакого вреда, если данные меньше, но лучше отфильтровать данные на уровне БД, чтобы избежать возможных ошибок нехватки памяти.

0 голосов
/ 21 февраля 2019

Делая два отдельных tableQueryX.filter().result, вы будете выполнять два отдельных запроса к базе данных.Вы можете заменить его одним запросом, объединяющим две таблицы.

Трудно сказать, какой подход лучше с точки зрения производительности, поскольку он зависит от количества предложений filter или where и от того, какие индексы используются базой данных для их выполнения.Если вам нужна высочайшая производительность, попробуйте оба подхода и выберите самый быстрый.

Если оба ваших запроса дают большой объем данных, вам также необходимо учитывать использование памяти для вашего приложения, поскольку все данныезагружается до того, как можно будет использовать коллекцию API Scala.

...