【问题标题】:Prisma timesout whith large datasets大型数据集的 Prisma 超时
【发布时间】:2022-11-07 04:33:05
【问题描述】:

我有一个应用程序(Node.js(Fastify),带有 prisma 的 postgres),它根据日期从外部将销售额写入 postgres db。写入销售额后,时间戳将写入表中,以便稍后检查该日期是否已被查询(因此,如果我们请求 2019 年 10 月的销售额,它将检查之前是否查询过 2019 年 10 月并返回销售额如果是这种情况,则从数据库中获取或从外部 API 中获取,将它们写入数据库并在下次日期表上写入 2019 年 10 月)。

我的问题是试图获得所有销售额,这可能需要几年时间。我现在这样做的方式是(请注意,我可以与 API 一起使用的唯一端点是年/月,所以我别无选择,只能每月迭代我的请求

  1. 获取第一次和最后一次销售之间的月数(例如,97)
  2. 循环每个月,检查这个月之前是否被查询过
  3. 如果之前已经查询过,什么也不做
  4. 如果之前没有查询过,从外部API获取这个年/月组合并写入db
  5. 循环结束后,从数据库中获取这两个日期之间的所有销售额

    我遇到的问题是,当我对端点进行分页时,prisma 在更新插入时与某些商店超时。有几个月可能会有数千笔销售与所售产品的关系,我觉得这就是问题所在。

    这是错误消息

    从连接池中获取新连接时超时。更多信息:http://pris.ly/d/connection-pool(当前连接池超时:10,连接限制:10)"

    我的问题是,是我的逻辑不好并且应该重做,还是我不应该在数据库中写那么多对象,我是否缺少最佳实践?

    我没有提供代码,因为它正在工作,我觉得问题在于逻辑而不是代码本身,但如果需要,我会很乐意提供代码。

【问题讨论】:

  • 我不明白这个应用程序是串行运行还是并行运行,也无法运行批量查询或插入。代码会有所帮助。我肯定会在晚上或每小时开始预加载所有数据的工作,而不是等待销售人员查询数据。 Postgres 支持数百万条记录

标签: node.js postgresql prisma fastify


【解决方案1】:

Prisma 有一个连接池,你需要告诉 heroku 的连接限制。

您的根文件夹中需要一个“.profile”文件,其中包含:

export DATABASE_URL="$DATABASE_URL?connection_limit=10&pool_timeout=0"

“.profile”类似于 .bashrc 或 .zshrc。它的内容将在您的服务器启动时执行。上面的行将覆盖 heroku 上数据库的标准环境变量。

【讨论】:

    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2023-01-24
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多