Я только что закончил смотреть шестую неделю лекций Мартина Одерски о Scala на Coursera. В лекции 5 он говорит, что
"... перевод for не ограничивается списками, последовательностями или даже коллекциями;
Он основан исключительно на наличии методов map, flatMap и withFilter.
Это позволяет использовать синтаксис for и для собственных типов — для этих типов необходимо определить только map, flatMap и withFilter."
Проблема, которую я пытаюсь решить, заключается в том, что у нас есть пакетный процесс, который загружает данные из нескольких баз данных, объединяет данные и каким-то образом экспортирует результаты. Данные достаточно малы, чтобы поместиться в памяти (несколько 100 000 записей из каждой исходной системы), но достаточно велики, чтобы важно думать о производительности.
Я мог бы использовать традиционную базу данных в памяти (например, H2) и получить к ней доступ через ScalaQuery или что-то подобное, но мне действительно нужен просто способ эффективно искать и объединять данные из разных исходных систем - эквивалентно индексам SQL. и ПРИСОЕДИНЯЕТСЯ. Кажется очень неудобным использовать полноценную реляционную базу данных + Scala ORM для чего-то, что можно легко и эффективно решить с помощью некоторой структуры данных, родной для Scala.
Моим первым наивным подходом была бы векторная структура данных (для быстрого прямого доступа) в сочетании с одним или несколькими «индексами» (которые можно было бы реализовать как B-деревья, как в системах баз данных). Методы map, flatMap, withFilter этой комбинированной структуры данных могут быть достаточно интеллектуальными, чтобы использовать индекс, если он есть для запрашиваемых полей, или у них может быть «подсказка» для его использования. .
Мне просто интересно, такие структуры данных уже существуют и доступны, или мне нужно реализовать их самостоятельно? Есть ли библиотека или структура коллекции для Scala, которая решает эту проблему?