当前我有以下代码将我的结果集转换为jsonobject,然后将其附加到jsonarry,但是对于大型数据集来说,处理时间太长了。我正在寻找一种替代方法或库来改善我当前的计算时间。
目前需要16到17秒才能从Oracle DB
处理14K记录 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);
}
如果您使用的是Oracle 12CR2,则可以使用Oracle提供的功能(JSON_OBJECT,JSON_ARRAY,JSON_OBJECTAGG等(直接从数据库中生成JSON,可以阅读。编码的速度将更快,更易于。
您尚未发布有关数据模型的其他详细信息,因此我们可以为更具体的内容提供帮助,但请随时探索下面的文档。
https://docs.oracle.com/en/database/oracle/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"}
我会进行以下测试:f:=从数据库中获取所需的时间;J:=时间需要从预先提取的序列化JSON。我怀疑您的F>> J,这表明您需要的不是不同的JSON LIB,而是从数据库中读取的速度。这可能是可能的,也可能不是可溶的。但是,如果f&lt;&lt;J,考虑将您的序列化并行以利用额外的内核。