暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 向node.js返回分层数据的选项

ASKTOM 2020-01-12
401

问题描述

首先,我要感谢您对Node.js的支持及其通过node-oracledb软件包与Oracle的集成。从plsql中实现的ui过渡到通过node.js进行数据访问的Vue.js中实现的ui,这是我们成功的很大一部分。我们一直在尝试寻找更多的方法来利用Oracle中的强大功能,其中包括流水线表函数和嵌套集合。

到目前为止,当我们必须将分层数据发送到Vue ui时,我们已经通过调用一个新的PLSQL过程来完成此操作,该过程返回多个单独的ref游标,并使用这些游标在将其返回给客户端之前在node.js中重建分层。现在,node-oracledb模块支持返回嵌套表集合,我想了解使用此新功能代替单独的ref游标的优点和/或缺点。

此外,为了将分层数据发送到PLSQL中,我们一直将信息作为JSON的blob发送,然后使用PLSQL中的低级JSON API将其解析和内省。这似乎比在调用PLSQL之前将数据拆分为单独的平面数据集更直接。因此,我希望您输入可能使用嵌套表作为将数据发送到PLSQL而不是JSON的选项的优点/缺点。

感谢您提供的任何见解/建议。

专家解答

我与我们的三位节点专家进行了聊天-Dan McGhan,Chris Jones和Anthony Tuininga

这是他们的评论,几乎是逐字逐句。

Now that the node-oracledb module supports returning nested table collections I would like to understand what the pros and/or cons would be to using this new feature in place of separate ref-cursors.


我认为您指的是较新的对象和集合支持:https://oracle.github.io/node-oracledb/doc/api.html#objects

生成嵌套JSON时,我想你有几个选择:
1.在中间层缝合在一起的单个游标 (他们现在正在做什么)。
2.对象/集合支持
3.嵌套游标表达式支持
4.数据库中的JSON

所有这些,我认为 #1是什么似乎是现在正在做的事情,将是最困难的性能与复杂度.

对于 #2,你要问的新功能,我认为这有点僵化,因为你必须创建和维护与你在中间层想要的匹配的架构对象。当您需要使用未创建的对象 (例如MDSYS.SDO_GEOMETRY) 时,我认为这更有利。

我认为您将从 #3 (大约在20c时间范围内) 和 #4中受益最大。你可以用 #4做什么,每个数据库版本都会变得更好-我喜欢我们对JSON的支持,并在这里写道:

https://jsao.io/2018/10/relational-to-json-with-sql/

使用这种类型的查询,您不需要维护数据库对象。你会得到JSON字符串 (varchar2(4000) 默认情况下与18c中的CLOB支持)。如果您不需要进行任何中间层处理,则他们可以跳过解析JSON,而只需将其从Node.js流式传输到客户端即可。如果您将clob作为字符串获取,则性能应该非常好。

So I would like to you input on the benefits/drawbacks to possibly using nested tables as an option to sending data into PLSQL instead of JSON.

同样,我不喜欢为此维护架构对象,但也许有些人可能会喜欢它。

我喜欢你已经在做的事情,只需将JSON发送到数据库,解析它并做需要做的事情。这样可以使中间层中的数据相关逻辑尽可能轻。

总之,使用对象/集合支持的潜在好处/缺点是:

福利
o可以很好地拥有Node.js数据库代码基于数据库中的对象,这些对象的形状与中间层中的对象相同。

缺点
o必须使数据库中的对象与中间层保持同步 (可能会使架构迁移复杂化)。
o潜在的性能问题。

一个获取更多信息并继续讨论的好地方是节点论坛

https://community.oracle.com/community/groundbreakers/database/developer-tools/node_js


文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论