」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在閱讀本文之前,請勿使用 Prisma ORM!

在閱讀本文之前,請勿使用 Prisma ORM!

發佈於2024-11-08
瀏覽:379

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]刪除
最新教學 更多>
  • ## Compare() 與 CompareTo():什麼時候應該在 Java 中使用 Each ?
    ## Compare() 與 CompareTo():什麼時候應該在 Java 中使用 Each ?
    闡明compare()和compareTo()之間的區別Java生態系統圍繞操作對象展開,確定它們的相對順序在各種場景中至關重要。本文旨在闡明兩個關鍵方法:compare() 和compareTo() 之間的細微差別,闡明它們在比較對像中的不同作用。 compareTo()compareTo() 位...
    程式設計 發佈於2024-11-09
  • 兩個指針和滑動視窗模式
    兩個指針和滑動視窗模式
    雙指標與滑動視窗模式 模式1:常數視窗(如window = 4或某個整數值) 例如,給定一個(-ve 和 ve)整數數組,找到大小為 k 的連續視窗的最大和. 模式2:(可變視窗大小)具有的最大子數組/子字串範例:sum
    程式設計 發佈於2024-11-09
  • 何時使用 PSR-4 與類別映射自動載入以獲得最佳效能?
    何時使用 PSR-4 與類別映射自動載入以獲得最佳效能?
    PSR-4 與類別映射自動載入:解決效能爭論問題Composer 為類別自動載入提供了多種選項:PSR- 0/ 4 標準或直接類別映射掃描。儘管文件推薦 PSR-4,但使用者認為類別映射提供更快的載入速度。這就提出了一個問題:如果類別映射看起來比 PSR-4 更優秀,為什麼還要使用 PSR-4? P...
    程式設計 發佈於2024-11-09
  • 使用Java Native Access (JNA)呼叫MacOS API
    使用Java Native Access (JNA)呼叫MacOS API
    介紹 這是一個關於如何將 JNA 與 MacOS API 結合使用的簡單範例。我不會解釋這一點,因為我仍在學習,但我將程式碼保持最少,以便更容易理解並了解如何將其用於其他目的的基本概念。 大部分程式碼來自 Intellij-Community(Apache 授權)。 ...
    程式設計 發佈於2024-11-09
  • 了解 JavaScript 中的匯出和匯入
    了解 JavaScript 中的匯出和匯入
    在 JavaScript 中,模組是獨立的程式碼單元,可以使用匯出將資產公開給其他模組,並使用導入使用來自其他模組的資產。這種機制對於在現代 JavaScript 應用程式中建立模組化和可重複使用的程式碼至關重要。 預設導出 一個模組只能有一個預設導出。 要匯出預設資源,請在匯出的實體之前使用 ...
    程式設計 發佈於2024-11-09
  • 如何避免 Go 模板中 HTML 和 JSON 的意外轉義?
    如何避免 Go 模板中 HTML 和 JSON 的意外轉義?
    在Go 模板中轉義HTML 和JSON在Go 模板中,正確處理HTML 和JSON 以防止意外轉義至關重要。考慮以下範本:<some_html> {{ .SomeOtherHTML }} </some_html>如果您希望輸出只是 ,那麼您可能會遇到到< 和& 等特殊字元被轉...
    程式設計 發佈於2024-11-09
  • CORS 可防止哪些錯誤:「Access-Control-Allow-Origin 不允許來源」?
    CORS 可防止哪些錯誤:「Access-Control-Allow-Origin 不允許來源」?
    CORS 防止的錯誤:「Access-Control-Allow-Origin 不允許來源」簡介:跨來源資源共享(CORS) 期間,當用戶端腳本嘗試從與其運行來源不同的來源存取資源。 原因:此錯誤有幾個潛在原因: 同源策略:未經伺服器明確許可, JavaScript 被限制存取其網域之外的資源。此策...
    程式設計 發佈於2024-11-09
  • 為什麼 useState 在嚴格模式下渲染元件兩次?
    為什麼 useState 在嚴格模式下渲染元件兩次?
    理解useState中的雙重渲染在React中,useState鉤子通常用於管理元件狀態。但是,在某些條件下,您可能會注意到使用 useState 呈現的元件對於每次狀態更新都會呈現兩次。這種行為讓許多未啟用嚴格模式的開發人員感到困惑。為什麼會出現這種情況? 嚴格模式的作用與未啟用嚴格模式的假設相反...
    程式設計 發佈於2024-11-09
  • Flex 專案是區塊級還是 Flex 級?深入研究 CSS 佈局
    Flex 專案是區塊級還是 Flex 級?深入研究 CSS 佈局
    Flex 專案令人困惑的本質:區塊級還是 Flex 等級? Flex 專案是否是區塊級的問題一直是CSS 開發者之間的爭論。 CSS 靈活框佈局模組等級 1 規定 Flex 項目位於 Flex 級別,而不是區塊級別。然而,後面的部分顯示彈性項目的顯示值是「塊化」的。這就提出了一個問題:Flex 專案...
    程式設計 發佈於2024-11-09
  • 如何在不使用 Sudo 的情況下在 macOS 上安裝 Python 套件時修復權限錯誤?
    如何在不使用 Sudo 的情況下在 macOS 上安裝 Python 套件時修復權限錯誤?
    排查macOS 上Pip 的權限錯誤嘗試在Mac 上安裝Python 套件時,您可能會遇到與寫入日誌檔案或網站套件相關的權限錯誤目錄。這些錯誤可能會令人沮喪,特別是如果您想在當前使用者帳戶下安裝軟體包而不使用 sudo。 權限錯誤的根本原因預設情況下,Pip 會嘗試在系統中安裝軟體套件-wide P...
    程式設計 發佈於2024-11-09
  • JavaScript 可以使用座標模擬點擊嗎?
    JavaScript 可以使用座標模擬點擊嗎?
    在 JavaScript 中以座標模擬點擊在 Web 開發中,有時需要模擬使用者交互,例如點擊。 JavaScript 提供了一種利用特定座標來實現此目的的方法。 在 JavaScript 中基於 x,y 座標模擬點擊是否可行? 是的,可以使用 JavaScript 中的座標模擬來點擊。但是,重要的...
    程式設計 發佈於2024-11-09
  • 如何在 Go 中自動執行外部命令輸入:繞過「登入」等命令的使用者互動的指南
    如何在 Go 中自動執行外部命令輸入:繞過「登入」等命令的使用者互動的指南
    Go 自動化外部命令輸入在 Go 中,執行外部命令並管理其輸入和輸出是一項常見任務。但是,在處理提示使用者輸入的命令(例如「登入」)時,以程式設計方式自動執行這些輸入可能具有挑戰性。 解決此問題的一種方法是直接寫入命令的標準輸入(stdin) )使用位元組緩衝區。讓我們深入研究提供的解決方案:lo...
    程式設計 發佈於2024-11-09
  • 如何使用並發在 Go 中高效率地讀寫 CSV 檔案?
    如何使用並發在 Go 中高效率地讀寫 CSV 檔案?
    Go 中高效的 CSV 讀寫Go 中高效的 CSV 讀寫package main import ( "encoding/csv" "fmt" "log" "os" "strconv"...
    程式設計 發佈於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 示範如何使用字串設定 CSS ...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3