PostgreSQL存储过程与服务器端JavaScript函数对比

3

我在应用程序中通过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"}]

我需要暂时或永久地存储从此JSON中聚合数据计算的多个指标,并且我需要这些指标执行我的数据库中的其他程序。
目前,我在处理post请求时使用JavaScript函数计算指标,并将值插入我的表与原始JSON数据一起。我想知道是否更有效率的方法是由存储在我的PostgreSQL数据库中的触发器函数执行计算(知道SQL函数需要从JSON原始数据中检索数据)。
我已经阅读了关于此主题的其他帖子,但它们是许多年前发布的,而不是使用Node.js,因此我认为人们可能有关于使用SQL存储过程与服务器端JavaScript函数的利弊的新见解。
编辑:我应该提到,我的大部分应用程序逻辑已经主要存在于PostgreSQL存储过程和视图中。

我倾向于在需要的地方放置逻辑,并将数据库视为一个单独的应用程序,其API恰好是SQL。如果逻辑对于数据的一致性和完整性至关重要,则应该将其放在数据库中,因为维护数据是数据库的工作。顺便说一句,对于PostgreSQL,有PL/v8,因此您可以使用JavaScript编写触发器和过程,如果您担心处理太多语言。 - mu is too short
酷,我不知道 PL/v8。 - Clémentine
2个回答

1

一般来说,我不会采用这种方法,因为存在将触发器与代码同步失调的风险。通常,单一职责原则应该是指导:DB 用于存储数据,代码用于操作数据。除非您有一个真正紧迫的业务需求来打破这个模式,否则我建议不要这样做。

如果您清空 DB 并从头开始,是否有迁移可以重新创建触发器?在以后阅读应用程序代码时,您或同事是否会意识到它们的存在并想知道正在发生什么?如果有标准化的触发器管理方式,其中配置将与应用程序的其余部分一起存储为代码,则可能没有问题。如果没有,请谨慎。小的性能提升可能不值得潜在的开发人员时间和出货错误。


在我的情况下,恰恰相反,除了这一部分之外,所有的操作都在数据库中进行,是的,配置文件与代码一起存储。 - Clémentine

1

目前我在一家公司工作,他们全部使用SQL函数.. 我强烈建议不要这样做。

当调试问题时,逻辑分散在Javascript和SQL之间真的很麻烦,特别是如果像我一样,更熟悉JS。

这些函数至少都被跟踪在源代码控制中,并且在部署过程中在数据库中更新/创建,但这意味着您需要查看两个地方才能跟踪代码。

我完全同意其他答案,单一职责原则,数据库用于存储,服务器/应用程序用于逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接