私は10000+レコードを返すmongo DBクエリを持っています。ビジネスサービスでは、GSON(Google JSON)形式でレコードを返します。以下はコードスニペットです。google.gson.JsonArray形式のMongoDBから大きなデータセットを返す効果的な方法
String mongoClientURI = null;
mongoClientURI = "mongodb://" + dbUser + ":" + pwd + "@" + host + ":" + port + "/" + databaseName;
MongoClient client = new MongoClient(new MongoClientURI(mongoClientURI));
MongoDatabase db = client.getDatabase(databaseName);
// Find query returns more than 10K records
FindIterable<Document> dbResult = db.getCollection("mycollection").find();
// This line takes too much time & CPU
List<Document> result = getDocumentArray(dbResult);
// This line takes too much time & CPU
JsonArray finalResult = getJSONArray(result);
public static List<Document> getDocumentArray(FindIterable<Document> input) {
List<Document> output = new ArrayList<Document>();
for (Document doc : input) {
output.add(doc);
}
return output;
}
public static JsonArray getJSONArray(Iterable<Document> docs) {
JsonArray result = new JsonArray();
if (docs == null) {
return result;
}
for (Document doc : docs) {
JsonObject jsonObject;
JsonParser parser = new JsonParser();
try {
jsonObject = parser.parse(doc.toJson()).getAsJsonObject();
result.add(jsonObject);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
return result;
}
問題はフェッチとGSONアレイへのMongoDBのデータのconvesionをしながら、それは時間とCPUサイクルがかかるです。誰でもmongodbからgson形式に大きなデータセットをフェッチする効果的な方法は何ですか?
は、一般的に私の周り10K、20Kへの記録、(50K max)を取得します。私はそれらのすべてを返す必要があります。私のUIコンポーネントでは、データをレンダリングするためには、すべてのレコードが必要です。一般の人々は、したがって、それは一度にあまりにも多くのレコードを持っていませんが、私の場合、私は&は、オンザフライでのオブジェクトのクラスタを作成し、すべてのレコードを取るマップコンポーネントを持って、ページングとデータグリッドを使用します。
ご協力いただければ幸いです。
アトゥールSureka
この結果を組み合わせてみてください任意のタイプのメモリ内オブジェクト表現ではなくストリームへの書き込みあなたの質問はもちろん、すべてをデータベースコレクションにダンプするよう求めています。ストリームを使用し、メモリにロードしないでください。 –