postgresql存储过程与服务器端javascript函数

时间:2016-01-10 21:18:44

标签: javascript json node.js postgresql stored-procedures

在我的应用程序中,我在一个post请求中收到json数据,我将其作为原始json数据存储在表中。我使用postgresql(9.5)和node.js。

在此示例中,数据是一个由用户体验的大约10个测验问题的数组,如下所示:

[{"QuestionId":1, "score":1, "answerList":["1"], "startTime":"2015-12-14T11:26:54.505Z", "clickNb":1, "endTime":"2015-12-14T11:26:57.226Z"}, 
 {"QuestionId":2, "score":1, "answerList":["3", "2"], "startTime":"2015-12-14T11:27:54.505Z", "clickNb":1, "endTime":"2015-12-14T11:27:57.226Z"}]

我需要存储(临时或永久)通过在quizz级别聚合来自此json的数据计算的几个指标,因为我需要这些指标来执行我的数据库中的其他过程。

到目前为止,我在处理post请求时使用javascript函数计算指标,并在原始json数据旁边插入我的表中的值。我想知道在postgresql db中存储的触发器函数执行计算是否更高效(知道sql函数需要从json原始数据中检索数据)。

我已经阅读了关于这个主题的其他帖子,但很多年前它被问到而不是node.js,所以我认为人们可能对使用sql存储过程与服务器端javascript的利弊有了新的认识。功能

编辑:我应该提到我的大多数应用程序的逻辑主要在于postgresql存储过程和视图。

2 个答案:

答案 0 :(得分:1)

目前在某个已经全力开发 SQL 函数的地方工作..我们有超过一千个..我强烈建议不要这样做。

在调试问题时,在 Javascript 和 SQL 之间进行逻辑拆分是一个真正的痛苦,尤其是如果像我一样,你更熟悉 JS。

这些函数至少都在源代码控制中进行了跟踪,并作为部署过程的一部分在数据库中进行了更新/创建,但这意味着您在尝试遵循代码时有两个地方可以查看。

我完全同意另一个答案,单一职责原则,DB 用于存储,服务器/应用用于逻辑。

答案 1 :(得分:0)

通常,由于存在使触发器与代码不同步的风险,我不会使用该方法。一般来说,单一责任原则应该是指南:DB存储数据和代码来操纵它。除非你有一个非常紧迫的业务需要打破这种模式,否则我建议反对它。

如果您擦除数据库并从头开始,是否有迁移将重新创建触发器?在阅读应用程序代码并想知道发生了什么事时,您或同事是否会意识到他们是否会在那里?如果有一种标准化的方法来管理触发器,其中配置将作为代码存储在应用程序的其余部分,那么可能不是问题。如果没有,请小心。小的性能提升可能不值得丢失开发人员时间和运输错误的可能性。