【发布时间】:2022-11-07 04:33:05
【问题描述】:
我有一个应用程序(Node.js(Fastify),带有 prisma 的 postgres),它根据日期从外部将销售额写入 postgres db。写入销售额后,时间戳将写入表中,以便稍后检查该日期是否已被查询(因此,如果我们请求 2019 年 10 月的销售额,它将检查之前是否查询过 2019 年 10 月并返回销售额如果是这种情况,则从数据库中获取或从外部 API 中获取,将它们写入数据库并在下次日期表上写入 2019 年 10 月)。
我的问题是试图获得所有销售额,这可能需要几年时间。我现在这样做的方式是(请注意,我可以与 API 一起使用的唯一端点是年/月,所以我别无选择,只能每月迭代我的请求
- 获取第一次和最后一次销售之间的月数(例如,97)
- 循环每个月,检查这个月之前是否被查询过
- 如果之前已经查询过,什么也不做
- 如果之前没有查询过,从外部API获取这个年/月组合并写入db
- 循环结束后,从数据库中获取这两个日期之间的所有销售额
我遇到的问题是,当我对端点进行分页时,prisma 在更新插入时与某些商店超时。有几个月可能会有数千笔销售与所售产品的关系,我觉得这就是问题所在。
这是错误消息
从连接池中获取新连接时超时。更多信息:http://pris.ly/d/connection-pool(当前连接池超时:10,连接限制:10)"
我的问题是,是我的逻辑不好并且应该重做,还是我不应该在数据库中写那么多对象,我是否缺少最佳实践?
我没有提供代码,因为它正在工作,我觉得问题在于逻辑而不是代码本身,但如果需要,我会很乐意提供代码。
【问题讨论】:
-
我不明白这个应用程序是串行运行还是并行运行,也无法运行批量查询或插入。代码会有所帮助。我肯定会在晚上或每小时开始预加载所有数据的工作,而不是等待销售人员查询数据。 Postgres 支持数百万条记录
标签: node.js postgresql prisma fastify