需要一种更有效的方法将JDBC结果集转换为JSON数组



当前我有以下代码将我的结果集转换为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,考虑将您的序列化并行以利用额外的内核。

相关内容

  • 没有找到相关文章

最新更新