JDBC を使用して、InMemory データ グリッドと NewSQL ソリューションである DB として gemfireXD を使用しているデータを処理しています。
Step1 - テーブル (Table1) からすべての個別のキー (field1) を取得しています
Statement stmt = conn.createStatement();
stmt.execute("select distinct field1 from Table1");
ResultSet rs = stmt.getResultSet();
List<String> keyList = new ArrayList<String> ();
while (rs.next()) {
keyList.add(rs.getString("field1"));
}
ステップ 2 - 上記のリストの各キーについて同じテーブルをクエリしています。これにより、キーごとに 2 つのレコードが返されます。
キーごとにこれら 2 つのレコードを処理し、キーのこれら 2 つの行から最終的に処理された 1 つのレコードを作成する必要があります。これは、最終的に別のテーブル (table2) に格納する必要があります。
for (int i = 0; i< fieldList.size(); i++) {
stmt.execute("select * from Table1 where field1=" + keyList.get(i));
ResultSet rs = stmt.getResultSet();
// the resultset should contain 2(or more) rows for the key which need to be processed based on some logic.
// Finally need to create 1 processed record for the given key.
// Insert the processed record to Table2
}
Table1 には数百万のレコードがあるため、上記のデータ処理方法は時間がかかります。
gemfireXD で処理を並列化する必要があります。
PIG または SPARK の並列処理機能 (レコードのタプル/バッグの作成と MR プログラミングの使用) を使用して、数時間以内にこれと同じ処理を行うことができます。
gemfireXD で DATAAWARE プロシージャを試し、それを使用してプロシージャ呼び出しを並列化しましたが、gemfireXD にデータの並列処理を行うための機能が必要であることを願っていますが、うまくいきませんでした。
私は、gemfire XD がこの目的のために他のアプローチを持たなければならないことを望んでいます
望ましい結果を達成するために、gemfireXD の実装アプローチを提案してください。