prisma,next.js,&postgres陷阱

2021-05-13 02:37:29

在本周初,我在一个项目上完成了一些最终触摸,即我' d一直在工作几周。在旨在构建此项目时,我的初步决定是下一个问题,因为我真的很喜欢反应。我听到了很多关于prisma的有趣的东西,所以我以为我' d给出了镜头。当它来到数据库时,没有那么多选择,所以我和PostgreSQL一起去过我最舒服的那个,因为PRISMA大多支持SQL数据库(尽管他们有MongoDB适配器即将到来)。

在发展中,这一切都是微风。创建模式非常容易,运行迁移,并使用prisma客户端。这几乎是真的太好了。当它来部署到Vercel的一切,那个问题开始时。

部署到生产后,一点读一下人们通常被托管的Postgres数据库,而DigitaloCean似乎是一个非常好的替代方案。与他们的" 1点击"解决方案,我真的很快得到了一个生产就绪的数据库,并运行。我在这里遇到的问题是在部署到Vercel并使用API​​路由的无服务器中。问题是,数据库的活动连接数量将在几分钟后真正飙升。

解决方案是为数据库设置一个名为Connection Pools的东西。在Digitalocean中,这真的很容易,你可以在这里阅读更多信息。在那里这个真正的伟大的YouTube视频,Prisma(Daniel Norman)的员工经历了如何解决这个问题。

我遇到的另一个问题是我拥有我所有的服务,下一个服务,下一个问题,下一个问题.js API路由和数据库部署在不同的地理位置中。在降低请求运行所需的时间时,这效果非常重要。

您希望确保您在大致相同的地理区域找到所有服务(彼此越越好)。在这里,您可以了解如何为Next.js客户端设置您所在的地区,并且您可以在此处阅读有关如何为API路由执行的信息。不幸的是,如果您在专业团队计划中,您只能设置API路线的地理位置。我认为这是一个漂亮的迫切举动。

最后一个但可能是最大的,我遇到的问题是使用下一个验证进行身份验证。事实证明,当使用Neut-auth使用基于会话的身份验证时,API路由的执行时间大大慢,而不是使用基于JWT的身份验证时。

如果您&#39,则要确保您手动选择基于JWT的身份验证;重新使用Next-Auth作为身份验证处理程序。在这里,您可以阅读更多关于Neut-Auth和JWT' s的信息,您可以看到如何使用JSON Web令牌而不是会话实际保护您的API路由。

使用现代但未经测试的堆栈将永远具有挑战性。我真的很喜欢使用这个堆栈(特别是在开发模式中),因此在进行生产时遇到了这么多问题时非常沮丧。几件事,我仍然发现有点讨厌,但我可以' t真的逃脱了:

加入("包括"在prisma中)将为执行时间添加一定数量的额外延迟。我认为你必须通过做大量包括或者是否想要在客户端上做更多的请求来为自己提供某种评估。

如果您想了解有关发现这些问题,解决方案和测量的过程的更多信息,您可以查看此GitHub问题。而且,如果您喜欢这种内容,您可以在Twitter @alingroen上关注我。