私はORMliteでマップされたデータベーステーブルを持っていますが、それにはいくつかのデータ(18列)が含まれており、ForeignCollectionField(eager = true)
も含まれています。海外のコレクションを熱心に読み込む方法を教えてください。
問題は、このテーブルからすべてのデータをロードするときです... ORMliteは、ジョインを使用する代わりにすべてのアイテムのクエリを作成しています。これは67124のクエリをもたらし、このテーブルからすべてのオブジェクトを永久にロードすることになります。
しかし、これは数秒で右結合クエリで実行できますか?代わりに何千ものクエリを生成するのはなぜですか?
どのように高速化できますか?ロークエリを作成してRawRowMapperを作成する必要がありますが、ORMを無意味に使用しています。
ormliteにeagerコレクションを読み込む方法を教えてください。 queryForAll
は道ではありません。
なぜすべてのデータをロードしようとしていますか? ORMは、「すべてのデータをロードする」唯一の有効な理由であるレポートまたはETL用ではありません。これにはストアドプロシージャまたはビューを使用します。あなたが書いているのは、熱心な負荷を使って修正する必要がある 'N + 1'問題です。どのようにクエリを作成しており、どのようにマッピングを定義しましたか? –
PS ORMs *は実際には報告やETLのためのものではありません。これは単なる学問的な話です。ドメインロジックを適用しない場合は、行と値をオブジェクトに変換することで何も得られません。 –
この場合、すべてのデータをロードする必要があります。すべてのデータは3Dグラフで後で表示され、シミュレーションに使用されます...これには大きなドメインロジックがあります。このテーブルにはもっと多くのカラムがあり、データベース全体にはもっと多くのテーブルがありますが、今回はすべてのロードを遅くする必要があります。たとえ大きなドメインロジックがなくても、すべてのデータを最初からロードしていても、 XMLファイル全体を書き換えるのではなく、実行時に列を更新できるので、このデータを保存することができます。 –