Индексируемые структуры данных за Scala для понимания

Я только что закончил смотреть шестую неделю лекций Мартина Одерски о Scala на Coursera. В лекции 5 он говорит, что

"... перевод for не ограничивается списками, последовательностями или даже коллекциями;

Он основан исключительно на наличии методов map, flatMap и withFilter.

Это позволяет использовать синтаксис for и для собственных типов — для этих типов необходимо определить только map, flatMap и withFilter."

Проблема, которую я пытаюсь решить, заключается в том, что у нас есть пакетный процесс, который загружает данные из нескольких баз данных, объединяет данные и каким-то образом экспортирует результаты. Данные достаточно малы, чтобы поместиться в памяти (несколько 100 000 записей из каждой исходной системы), но достаточно велики, чтобы важно думать о производительности.

Я мог бы использовать традиционную базу данных в памяти (например, H2) и получить к ней доступ через ScalaQuery или что-то подобное, но мне действительно нужен просто способ эффективно искать и объединять данные из разных исходных систем - эквивалентно индексам SQL. и ПРИСОЕДИНЯЕТСЯ. Кажется очень неудобным использовать полноценную реляционную базу данных + Scala ORM для чего-то, что можно легко и эффективно решить с помощью некоторой структуры данных, родной для Scala.

Моим первым наивным подходом была бы векторная структура данных (для быстрого прямого доступа) в сочетании с одним или несколькими «индексами» (которые можно было бы реализовать как B-деревья, как в системах баз данных). Методы map, flatMap, withFilter этой комбинированной структуры данных могут быть достаточно интеллектуальными, чтобы использовать индекс, если он есть для запрашиваемых полей, или у них может быть «подсказка» для его использования. .

Мне просто интересно, такие структуры данных уже существуют и доступны, или мне нужно реализовать их самостоятельно? Есть ли библиотека или структура коллекции для Scala, которая решает эту проблему?


person egbokul    schedule 03.01.2013    source источник


Ответы (1)


Нет в стандартной библиотеке (кроме Vector, конечно), и я не знаю ни одной нестандартной библиотеки, предоставляющей их.

person Alexey Romanov    schedule 03.01.2013