postgresql 层与应用层的序列化

问题描述 投票:0回答:1

我发现这方面的信息/意见少得惊人。

序列化是否最好直接发生在 sql(在本例中为 postgresql)层(选择特定列),还是首先获取整个记录(所有列)然后在应用程序中格式化数据在性能方面是否完美层?

在 NodeJS 打字稿场景中,我个人喜欢通过简单的功能 util 函数在应用程序层上进行序列化,并使用某些 TS 接口准确定义最终数据的样子。在我看来,这种方法非常轻量级和模块化,但是,我想知道是否存在不建议这样做的情况?

如果我们获取 100 条记录有什么关系吗?如果每行有 100 列,这会重要吗?我的理解是,数据库的主要负担是实际获取数据、基于复杂过滤器的查询和连接,或者它是否也会对每条记录查询多少列产生明显的影响?

给出一个易于理解的代码示例:

const user = await User.findOne({ where: { email }, attributes: ['email', 'username', 'id'] });

// which will be converted to:

SELECT email, username, id FROM users WHERE email = 'some email';

const user = await User.findOne({ where: { email } });

// which will be converted to:

SELECT * FROM users WHERE email = 'some email';

// serialization happens afterwards on the backend app layer

const serializedUser = serializeUser(user);
node.js typescript postgresql serialization sequelize.js
1个回答
0
投票

我猜当你说“序列化”时你的意思是“项目”。

如果您始终获取所有列而不是仅获取所需的列,则会对数据库性能产生负面影响。这有几个原因:

  • 需要通过网络传输更多数据

  • PostgreSQL 必须分解(“变形”)整个表行,并且在最后一个所需列之后无法停止

  • PostgreSQL 无法跳过 de-toast 压缩或存储脱线的大型属性

  • PostgreSQL 没有机会消除不必要的连接(如果您的查询中有任何连接)

© www.soinside.com 2019 - 2024. All rights reserved.