当前,我有以下代码将结果集转换为JSONObject,然后附加到JSONArry,但是对于大型数据集,处理时间太长。我正在寻找一种替代方法或库来改善当前的计算时间。
当前处理Oracle数据库中的14k记录需要16到17秒
int total_rows = rs.getMetaData().getColumnCount();
while (rs.next()) {
JSONObject obj = new JSONObject();
for (int i = 0; i < total_rows; i++) {
obj.put(rs.getMetaData().getColumnLabel(i + 1)
.toLowerCase(), rs.getObject(i + 1));
}
jsonArray.put(obj);
}
答案 0 :(得分:2)
如果使用的是Oracle 12cR2,则可以利用Oracle提供的功能(JSON_OBJECT,JSON_ARRAY,JSON_OBJECTAGG等)直接从数据库生成JSON,以供读取。它将大大更快,更容易编码。
您尚未发布有关数据模型的其他详细信息,因此我们可以帮助您解决更具体的问题,但是请随时浏览以下文档。
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adjsn/generation.html
我在下面创建了一个简单的示例,以展示其工作原理:
FSITJA@db01 2019-06-26 14:15:02> select json_object('name' value username,
2 'default_ts' value default_tablespace,
3 'temp_ts' value temporary_tablespace,
4 'common' value case when common = 'Y' then 'YES' else 'NO' end,
5 'oracle_maint' value case when oracle_maintained = 'Y' then 'YES' else 'NO' end
6 format json) as json_obj
7 from dba_users u
8 where oracle_maintained = 'Y'
9 and rownum <= 5;
JSON_OBJ
-----------------------------------------------------------------------------------------------------------
{"name":"SYS","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}
{"name":"SYSTEM","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}
{"name":"GSMCATUSER","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}
{"name":"XS$NULL","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}
{"name":"MDDATA","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}
答案 1 :(得分:1)
我将进行以下测试:F:=从数据库中获取所需的时间; J:=从预取序列化JSON所需的时间。我怀疑您的F >> J,这表明您需要的不是其他JSON库,而是从数据库中读取速度更快。这可以溶解或不溶解。但是,如果F << J,请考虑并行化序列化以利用额外的内核(如果有)。