Martin Odersky による Coursera での Scala に関する講義の第 6 週を見終わったところです。講義 5 で、彼は次のように述べています。
「... forの翻訳は、リストやシーケンス、さらにはコレクションに限定されません。
メソッドmap、flatMap、および withFilterの存在のみに基づいています。
これにより、独自の型にも for 構文を使用できます。これらの型には、map、flatMap、および withFilter のみを定義する必要があります。"
私が解決しようとしている問題は、いくつかのデータベースからデータをロードし、データを結合して何らかの方法で結果をエクスポートするバッチ プロセスがあることです。データはメモリに収まるほど小さい (各ソース システムから 100,000 レコード程度) が、パフォーマンスを考慮することが重要なほど大きい。
従来のインメモリ データベース (H2 など) を使用して、ScalaQuery などを介してアクセスすることもできますが、実際に必要なのは、さまざまなソース システムからのデータを効率的に検索して結合できる方法だけです。これは、SQL のインデックスと同等です。およびJOIN。Scala 固有のデータ構造によって簡単かつ効率的に解決できるものに、本格的なリレーショナル データベース + Scala ORM を使用するのは、非常に厄介です。
私の最初の素朴なアプローチは、(データベース システムのように B ツリーとして実装できる) 1 つ以上の "インデックス" と組み合わせた (高速な直接アクセスのための) ベクター データ構造です。この結合されたデータ構造のmap、flatMap、withFilterメソッドは、クエリされたフィールドにインデックスがある場合、インデックスを使用するのに十分なほどインテリジェントである可能性があります。または、インデックスを使用するための「ヒント」がある可能性があります。
そのようなデータ構造がすでに存在して利用可能かどうか、または自分で実装する必要があるかどうか疑問に思っていましたか? この問題を解決する Scala のライブラリまたはコレクション フレームワークはありますか?