我发现这方面的信息/意见令人惊讶.

直接在sql(在本例中是postgresql)层( Select 特定的列)上进行序列化是更好的吗?还是首先获取整个记录(所有列),然后在应用层中格式化数据,在性能方面是完全合适的?

在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';

vs.

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);

推荐答案

我猜你说的"序列化"是指"项目".

如果总是提取所有列,而不是只提取需要的列,则数据库性能会受到负面影响.这有几个原因:

  • 必须通过网络传输更多数据

  • PostgreSQL必须反汇编("变形")整个表行,并且不能在最后一列之后停止

  • PostgreSQL无法跳过对压缩或存储在行外的大型属性的解toast

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

Node.js相关问答推荐

如何解决TypeError:requ.isAuthenticated不是函数错误?

Twilio-获取呼叫录音不起作用的请求

如何更改ejs中的镜像src,以防从OMDB API获取的某些镜像具有src=N/A

Node.js PNG缓冲区获取未知图像格式错误

根据我的测试,为什么在编写Varint代码方面,NodeJS要比Rust快这么多?

找不到react 模块:错误:默认条件应该是最后一个

如何使用 node.js 将两个或多个 API 请求组合成一个端点并表达

无法使用 node 预签名 url 从 React 将图像文件上传到 s3

无法更新MongoDB中的文档:";伯森场';writeConcern.w';是错误的类型';数组'&引用;

在 Passport 策略回调中获取请求对象

制作一个接受命令行参数的脚本

来自 Node-aws 的 Dynamo Local:所有操作都失败无法对不存在的表执行操作

使用 Node.js 在内存中缓冲整个文件

如何将`yarn.lock`与`package.json`同步?

如何监控 node.js 上的网络,类似于 chrome/firefox 开发者工具?

将变量传递给nodemailer中的html模板

为什么我们要为 Angular 2.0 安装 Node.js?

fs.createWriteStream 不会立即创建文件?

续集findbyid不是一个函数,但显然findAll是

AWS Lambda:如何将秘密存储到外部 API?