”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 在阅读本文之前,请勿使用 Prisma ORM!

在阅读本文之前,请勿使用 Prisma ORM!

发布于2024-11-08
浏览:947

Não use Prisma ORM antes de ler isso!

想象一下混乱情况,您在 NeonDB 中创建一个具有 0.5GB 存储空间的免费数据库,然后想,“很好,我将使用免费套餐进行测试” 。然后,几个小时后,收到了致命的电子邮件:“您的存储空间已被消耗!”。哇,你什么意思?连椅子都没有热起来!答案是什么呢?我使用了辉煌的 Prisma ORM,为了改进,我全天运行了几次迁移,只是对模式进行建模。

让我们了解发生了什么,当然,为什么有时好的旧 SQL 仍然要好一千倍。

首先你需要了解自己的背景。我正在录制 CrazyStack 课程 124(我的 Node 和 React 训练营)。并且可以在没有 ORM 的情况下使用 postgres 或 mongodb。然而,一名学生在 WhatsApp 上要求我将 Prisma 纳入该项目。嘿嘿,我决定做个实验。

Prisma ORM:简单但昂贵

Prisma 是看起来完美的东西。 “我将抽象数据库查询,节省时间,这就是新的炒作。”但是,惊喜!天下没有免费的午餐,而这个兰戈是以烘烤储存的形式出现的。我白天运行了 migrates,它对 neondb 的影响很大。这甚至不是一个巨大的项目。

Prisma 不仅创建迁移,还留下一些额外的表和日志作为奖励。如果您像我一样正在测试事物并左右运行迁移,那么这份礼物最终来自希腊语。

Prisma很好,但是说到存储,它喜欢全力以赴:

  1. 轮次迁移:每次我运行迁移时,Prisma 都会创建并存储新的迁移。每个都有自己的元数据、日志和表格小包。

  2. 成倍增加的日志:为了确保不会出现问题(或者在出现问题时让您的生活更轻松),Prisma 会记录详细的日志。但这些日志会不断积累,而且由于我不是“无限”银行,它们很快就会成为一个问题。

  3. 使用辅助表重载:除了迁移之外,Prisma 还创建额外的表来跟踪各种事物,特别是在关系数据库中,例如 Postgres。

最后,这个看似简化生活的神奇工具最终吃掉了我的免费NeonDB

SQL“Na Nail”:为什么少即是多

这就是古老的 SQL 方法的用武之地。是的,Prisma 很棒并且可以节省时间,但有时它只会让事情变得复杂。让我们谈谈放弃 ORM 并手动编写查询的优点:

  1. 绝对控制:法案中没有什么意外。您确切地知道每行代码在做什么,并且您不会发现日志或隐藏表占用您的空间。

  2. No Dead Weight:使用直接SQL,你写的就是去银行的。没有元数据、迁移或日志会降低风险。

  3. 更高性能:如果做得好,直接 SQL 会消耗更少的空间和资源。对于像我这样的免费主义者来说,它是像 NeonDB 这样的小型银行的理想选择。

  4. 没有隐藏业务:没有从头开始创建的表或堆积的事务日志。控制权是你的,而且只属于你。

这个故事的寓意:

如果您像我一样喜欢测试工具并进行快速实验,请在将 Prisma ORM 放入空间有限的数据库之前三思而后行。 Prisma 是一个奇迹吗?和。但是,在像 NeonDB 这样的有限银行中,这就像在开派对时发现您购买的啤酒不足以满足每个人的需求。

有时,“动态”SQL 是最安全的方法,可以让您精确控制进入数据库的内容。教训是:下次,在 0.5GB 存储体上运行一个又一个迁移之前,我会考虑得更好。

版本声明 本文转载于:https://dev.to/devdoido/nao-use-prisma-orm-antes-de-ler-isso-5df8?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在 Go 中自动执行外部命令输入:绕过“登录”等命令的用户交互的指南
    如何在 Go 中自动执行外部命令输入:绕过“登录”等命令的用户交互的指南
    Go 自动化外部命令输入在 Go 中,执行外部命令并管理其输入和输出是一项常见任务。但是,在处理提示用户输入的命令(例如“登录”)时,以编程方式自动执行这些输入可能具有挑战性。解决此问题的一种方法是直接写入命令的标准输入(stdin) )使用字节缓冲区。让我们深入研究提供的解决方案:login :=...
    编程 发布于2024-11-09
  • 如何在 CSS 中为多个父级中的特定 n 个子级设置样式
    如何在 CSS 中为多个父级中的特定 n 个子级设置样式
    跨多个父级设置特定第 n 个子级的样式使用第 n 个子级选择器设置嵌套元素的样式时,需要注意的是,选择器在单父上下文中运行。当针对多个父级中的特定子元素时,这可能会带来挑战。问题:考虑以下标记:<div class="foo"> <ul> ...
    编程 发布于2024-11-09
  • 如何使用字符串插值将 CSS 属性设置为 SASS 中的 mixin 值?
    如何使用字符串插值将 CSS 属性设置为 SASS 中的 mixin 值?
    将 SASS Mixin 值设置为 CSS 属性创建通用边距/填充 mixin 时,可能需要将 CSS 属性设置为 mixin 值。为此,需要使用字符串插值。CSS 属性的字符串插值要使用变量作为 CSS 属性名称,需要字符串插值 (#{$var})。示例以下 mixin 演示了如何使用字符串插值设...
    编程 发布于2024-11-09
  • MUI TextField:构建变体、颜色和样式
    MUI TextField:构建变体、颜色和样式
    The mui textfield is a fundamental component in Material-UI, designed to capture user inputs efficiently and stylishly. This guide explores its build ...
    编程 发布于2024-11-09
  • 在 Java 中如何安全地将 Long 转换为 Int?
    在 Java 中如何安全地将 Long 转换为 Int?
    在 Java 中安全地将 Long 转换为 Int:一个全面的解决方案在 Java 中使用数字类型时,确保转换至关重要操作不会导致数据丢失。当将 long 值转换为 int 时,这一点尤其重要,因为 long 的精度可能超过 int。Java 8:简化流程Java 8 之前的版本,安全地将 long...
    编程 发布于2024-11-09
  • 如何修复集成 Authorize.net 支付网关时出现“调用未定义函数curl_init()”错误?
    如何修复集成 Authorize.net 支付网关时出现“调用未定义函数curl_init()”错误?
    未定义的函数:curl_init()在实现Authorize.net的支付网关的上下文中,您可能会遇到错误“调用未定义”函数curl_init()”。这表明您的系统上未正确配置或安装 PHP curl 扩展。Windows 操作系统对于 Windows 用户,请验证您的 php.ini 文件中的以下...
    编程 发布于2024-11-09
  • Next.js 中的 SSR 应用程序路由与页面路由相比有何新变化
    Next.js 中的 SSR 应用程序路由与页面路由相比有何新变化
    介绍 Next.js 长期以来一直是构建服务器渲染 React 应用程序的流行选择。凭借其对服务器端渲染 (SSR) 的内置支持,开发人员可以创建动态、SEO 友好的应用程序。然而,Next.js 13 中 App Router 的引入以及 Next.js 14 中的改进显着简化和...
    编程 发布于2024-11-09
  • CSS 中的垂直对齐实际上是如何工作的?
    CSS 中的垂直对齐实际上是如何工作的?
    CSS 中的垂直对齐:了解细微差别vertical-align 属性允许您将内联元素垂直放置在其父元素中。然而,除非您掌握基本原理,否则它的行为可能是不可预测的。内联元素和高度Vertical-align 仅影响内联元素。 和 等元素是块级元素,不受影响。对于没有固有行高的内联元素,例如 和 ...
    编程 发布于2024-11-09
  • Astra 项目:多模式人工智能的新时代
    Astra 项目:多模式人工智能的新时代
    Astra 项目由 Google DeepMind 开发,代表了多模式人工智能发展的突破性一步。与依赖单一输入类型(例如文本或图像)的传统人工智能系统不同,Project Astra 将多种形式的数据(包括视觉、听觉和文本输入)集成到一个有凝聚力的交互式人工智能体验中。这种方法旨在创建一个更直观、反...
    编程 发布于2024-11-09
  • 为什么我的 HTML 输出显示为纯文本而不是渲染?
    为什么我的 HTML 输出显示为纯文本而不是渲染?
    HTML 输出解释为纯文本而不是作为 HTML 接收这里的问题涉及 HTML 输出呈现为纯文本的场景被解析为正确的 HTML。提供了基本的 Go 实现,但呈现的输出在 pre 标记内显示逐字 HTML 代码。要纠正此问题,必须设置 Content-Type 标头以指定响应为 HTML。这可确保浏览器...
    编程 发布于2024-11-09
  • 如何使用 Dualite 构建登陆页面
    如何使用 Dualite 构建登陆页面
    我花了几个小时创建登陆页面的 Figma 设计。每种颜色都恰到好处,每个像素都就位,并且具有无缝的用户流程,但现在是实际编码此着陆页的令人畏惧的部分。 构建 Figma 设计是一项艰巨的任务。这就是我了解 Dualite 的地方,它使用 AI 将 Figma 设计转化为实际代码,帮助像我这样的开发人...
    编程 发布于2024-11-09
  • 如何在 PHP 中通过压缩将 PNG 转换为 JPG 并保持透明度?
    如何在 PHP 中通过压缩将 PNG 转换为 JPG 并保持透明度?
    在 PHP 中通过压缩将 PNG 转换为 JPG许多用户寻求通过减小图像文件大小同时保持视觉效果来优化其 Web 应用程序质量。将高质量 PNG 文件转换为 JPG 是实现此目的的常用方法,因为 JPG 通常具有较小的文件大小。 PHP 提供了多个函数和库来促进这种转换。要安全地将 PNG 转换为透...
    编程 发布于2024-11-09
  • 如何使用番茄钟计时器示例从 Manifest Vo VA 分步指南更新 Chrome 扩展程序
    如何使用番茄钟计时器示例从 Manifest Vo VA 分步指南更新 Chrome 扩展程序
    将 Chrome 扩展从 Manifest V2 更新到 Manifest V3 对于开发人员来说是关键的一步,因为 Google 已经逐步停止了对 Manifest V2 的支持。在本文中,我们将逐步介绍将最初使用 Manifest V2 构建的 Pomodoro Timer 扩展升级到更新的 M...
    编程 发布于2024-11-09
  • 如何将 ChatGPT API 与 Node.js 集成
    如何将 ChatGPT API 与 Node.js 集成
    将 ChatGPT API 与 Node.js 集成是向应用程序添加自然语言处理功能的强大方法。在这篇文章中,我们将探讨如何设置集成,从安装必要的库到实现 ChatGPT API 调用。 1. 先决条件 Node.js 安装在您的计算机上。 一个 OpenAI 帐户和一个有效的 AP...
    编程 发布于2024-11-09
  • 如何在不调用 launch() 的情况下创建多个 JavaFX 窗口?
    如何在不调用 launch() 的情况下创建多个 JavaFX 窗口?
    如何在 Java 中多次调用 launch()JavaFX 应用程序启动方法 launch() 设计为调用每个申请仅一次。尝试多次调用 launch() 会导致“IllegalStateException”错误。解决方案:将后续窗口创建包装在 Platform.runLater()而不是调用laun...
    编程 发布于2024-11-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3