我正在Heroku上编写一个node.js应用程序,并使用pg模块。我无法弄清楚为查询数据库所需的每个请求获取客户端对象的“正确”方法。
该文档使用如下代码:
pg.connect(conString, function(err, client) {
// Use the client to do things here
});
但是,您肯定不需要pg.connect
在使用数据库的每个函数中调用对吗?我看过其他执行此操作的代码:
var conString = process.env.DATABASE_URL || "tcp://postgres:1234@localhost/postgres";
var client = new pg.Client(conString);
client.connect();
// client is a global so you can use it anywhere now
我倾向于第二种选择,因为我相信Heroku的免费数据库实例无论如何都仅限于一个连接,但是以这种方式进行操作是否有任何弊端?每次使用之前,是否需要检查我的客户端对象是否仍处于连接状态?
我是node-postgres的作者。首先,我很抱歉文档未能阐明正确的选项:这是我的错。我会尝试改善它。我刚才写了一份Gist来解释这一点,因为对话对于Twitter来说时间太长了。
使用
pg.connect
是在Web环境中使用 的方式 。PostgreSQL服务器每次连接一次只能处理1个查询。这意味着如果您有1个全局
new pg.Client()
连接到后端,则基于postgres响应查询的速度,整个应用程序将成为瓶颈。它实际上将所有内容排列在一起,对每个查询进行排队。是的,它是异步的,所以没关系…但是您不是将吞吐量乘以10倍吗?使用pg.connect
将设置pg.defaults.poolSize
为合理(我们进行25-100次,尚不确定正确的数字)。
new pg.Client
当您知道自己在做什么时。当出于某种原因需要单个长期存在的客户端,或者需要非常仔细地控制生命周期时。一个很好的例子是使用
LISTEN/NOTIFY
。侦听客户端需要在周围并且连接并且不共享,以便它可以正确处理NOTIFY
消息。另一个示例是在打开1-off客户端以杀死某些挂起的东西或在命令行脚本中时。
一件事很有帮助,就是将对应用程序中数据库的所有访问集中到一个文件中。pg.connect
在整个过程中,请勿乱扔电话或新客户。有一个像db.js
这样的文件:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
这样,您可以将实现从pg.connect
更改为自定义客户端池或任何其他内容,而只需要在一处更改。
看一下执行此操作的node-pg-query模块。
问题内容: 即使在使用Java Swing一年以上之后,对我来说,它仍然像魔术一样。如何正确使用BufferStrategy,尤其是方法? 我想添加一个JFrame和一个Canvas,然后进行绘制。我还希望能够调整()画布的大小。每次我调整Canvas的大小时,似乎都会被浪费掉,或者变得毫无用处,因为在上使用并没有真正做任何事情。另外,它具有怪异的不确定性行为,我不知道如何正确同步它。 这就是我的
问题内容: 我想在Linux上使用该机制。我希望我的应用程序知道何时更改了文件。能否请您提供给我一个示例,该怎么做? 问题答案: 文档(来自具有inotify的Monitor文件系统活动) 在C API 提供了三个系统调用来构建各种文件系统监视器: 在内核中创建子系统的实例,并在成功和失败时返回文件描述符。与其他系统调用一样,如果失败,请检查诊断。 顾名思义,它增加了一块 手表 。每个监视都必须提
问题内容: 需要帮助,以了解如何在UIKit中使用prepareForReuse()。该文件说 您只应重置与内容无关的单元格属性,例如Alpha,编辑和选择状态 但是如何重置单个属性属性(例如isHidden)呢? 假设我的单元格有2个标签,我应该在哪里重置: 标签文本 label.numberOfLines label.isHidden 我的tableView(_:cellForRowAt :)
一段时间以来,我一直试图将我的tableview工作作为一种电子表格,通过背景线程进行更新,当单元格更新时,它会亮起几秒钟(更改样式),然后返回到原始样式。我已经知道,我不能直接在表格单元格中存储和设置样式,我需要某种支持类来保存这些数据。但是tableview“重用”单元格(使用相同的单元格处理不同的数据)的行为真的很奇怪。当所有单元格都适合屏幕时,它对我来说完美无瑕,但一旦我放置大约100个单
这是正确的吗?有没有更好的方法来构建这个?这能覆盖我所有的基础吗?
我正在尝试构建一个私有模块,我知道它只会被另一个TypeScript项目使用。 据此,(https://github.com/Microsoft/TypeScript/issues/5225)我应该能够简单地导入我的其他项目,而不需要构建类型定义。 问题是,当我试图导入该库时,我缺少该库上任何依赖项的类型定义。 情况如下: 假设你有两个项目<代码>库和导入,这是一个纯类型脚本节点模块。 只是从导入