2016-05-28 3 views
0

現在発火してPOCするのが初めてです。 マップにデータを保存/ロードする方法に関する質問があります。それは少しトリッキーで奇妙な要件です。 例:事前計算済みJOINクエリは、点火時のマップとして表示されます。

[データベース内のテーブル] + [アプリケーションのエンティティクラス]があります。 しかし、私はこれらをメモリ内の別々のマップに保存するのではなく、あらかじめ計算された結合結果を指定されたマップに保存する必要があります。

動的問合せ:従業員、部署、少なくともキーフィールドと何だろうがどうなるか、手の前に

私が知っているのJOIN $プロジェクトからEMPLOYEEID、employeeName、departmentName、プロジェクト名、projectStart、projectEndを選択値フィールドとなります。上の例から、私は以下のように私の "Map"を表すことができます

値:リスト(employeeName、value)、(departmentName、value)、(projectName、value)、(projectName、value)、(projectName、value) (projectEnd、value)

(employeeId、departmentId)の各ペアには、複数の値が関連付けられていることがわかります。しかし、ジレンマは私がドメインモデル/エンティティpojosを手で持っていないということです。このような動的なビュー/マップは、毎回ドメイン/エンティティモデルを変更する必要がなくなるように柔軟に追加できます。 私たちは、すべての呼び出しでこのようなクライアントの要求の何千もの毎回ジョイン/計算をしたくありません。

MapLoaderを使用して、または他の方法でこのような結合クエリを起動することはできますか? 私はMap with(Key = Set、Value = List)を最終結果を格納するためのデータ構造と考えることができます。

キーに基づいてそのようなマップから値を取得する際に、パフォーマンス上の問題はありますか? メモリの最適化が必要な場合はどうすればいいですか?

おかげで、 Dharam

答えて

1

あなたは、SQLクエリを使用する必要はありません。 IgniteをDBクエリ結果のための単純なキャッシュメカニズムとして使用するのは良いことです。クエリが実行されるたびにIgniteCacheに結果を保存し、同じクエリが要求された場合にこのキャッシュ結果を使用します。また、期限切れ[1]や退去[2]を使用して、キャッシュにあまりデータがなく、メモリが不足していないことを確認することもできます。

[1] https://apacheignite.readme.io/docs/expiry-policies

を[2] https://apacheignite.readme.io/docs/evictions

+0

しかし、それは私が[たびDBクエリ]を避けたいものです。起動時には、すべてのJOINされた結果セットをメモリにキャッシュしたいと思います。しかし、私はPOJO /ドメインモデルを持っていない、どのように私はそれらをキャッシュに格納する必要がありますか? 私が従業員または部署と言う場合、それらはドメイン/エンティティモデルクラスを表します。しかし、私はそれをキャッシュに格納するためにあらかじめ定義されたPOJOを持つことは望ましくありません。私は分散キャッシュの別々のマップにそれぞれ結果として動的クエリを追加することができるはずです。これは理由だと私は言いました。 Key = Set 値=リスト

+0

データベーステーブルをキャッシュに保存し、述語/クエリを適用して結合を計算したくありません。むしろ、あらかじめJOINされた結果を計算したいだけです。 - ユーザー1は、指定されたA、BIがA1、B1、B2、B3、B4、B5を必要としていると言うことがあります[キー(A、B)値(A1、B1、B2、B3、B4、B5)で区切られたマップ] - (A1、C1、C5)] –

+0

Igniteは、動的スキーマの変更をサポートするバイナリ形式でデータを格納します。クラスがない場合は、Builderを使用してオブジェクトを作成できます。https://apacheignite.readme.io/docs/binary-marshaller#modifying-binary-objects-using-binaryobjectbuilder –

関連する問題