你正在以錯誤的方式使用ORM

2021-09-28 17:41:26 字數 899 閱讀 6023

團隊棄用一種物件關係對映框架(orm),因為他們認為它效能不夠好或者增加了太多不可知的因素,但那通常是由於用法不對。在最近的一次演講中,jimmy bogard著重強調了在使用orm時他認為正確和錯誤的方式,其中包括對映和查詢問題。

jimmy描述的乙個對映問題是資料庫生成的對映**,即由工具從現有的資料庫建立**。這看上去可能很有吸引力,但他通常會發現,其中有太多的關係和不必要的導航,這會產生效能問題。相反,jimmy使用**優先的方式,新增他們需要的對映和關係,即使對於已經存在的資料庫,也是如此。

以jimmy的經驗來看,在使用orm時,開發人員抱怨的第一件事往往是過度延遲載入和select n+1載入,這些特性會使orm延遲載入乙個複雜模型中的所有資料,而不是按需讀取資料。問題在於,那可能會導致許多資料庫呼叫,例如,一次讀取乙個屬性或者在集合上迴圈時。相反,jimmy更傾向於盡可能多地使用「預先抓取(eager fetch)」,在一次請求中讀取所有需要的資料。

jimmy認為,repository模式並不是乙個好主意。在《領域驅動設計》原書中,repository原本是乙個介面,看上去像資料儲存上的乙個集合,但jimmy認為,這種模式已經演變成orm之上的外觀模式,隱藏了許多orm特有的特性。在這種模式下,repository只是乙個愚蠢的介面,有乙個僅僅作為實際orm**的實現。要有效地使用orm,就要使用這些隱藏的特性。這會使orm的實現細節暴露給應用,使repository成為orm上乙個中看不中用的包裝器。

作為repository的替代方案,jimmer更傾向於將處理特定請求的所有**放入乙個類中,從而將每個資料請求建模成乙個命令或者乙個查詢。這樣,變化,比如一種新的資料訪問策略,就封裝到乙個特定的類中。

jimmy提到的最後乙個糟糕的觀念是忽略sql。orm不是一種避免了解sql的方法,對於執行在orm上的關鍵業務系統,知道什麼sql在執行以及它的效能如何是很重要的。

sqlalchemy 的 ORM 方式使用示例

知乎 使用 sqlalchemy 的 orm 方式運算元據庫是一種怎樣的體驗?答 酸爽!這是 sqlalchemy 的層級圖。不難發現,其中 orm 是最頂級的封裝。orm 基本操作步驟如下 from sqlalchemy importcreate engine engine create engi...

選擇你的課Instagram群控的方式以及優勢!

如今人們對一切的推廣都是非常重視的,尤其是一些零售或者外貿行業的人更是如此,人們一般情況下都會選擇一些推光。但是推廣的方式也會有著一些不同。比如說人們如果選擇進行廣告推廣的話,固然是可以的,並且效果也比較好一些,也能夠得到乙個精準的 量,但是這樣的話,它的花費也會比較高一些。目前市場新出了一種你的課...

技術改變生活 區塊鏈正在改變你的生活方式

7月16日,由阿薩石科技 哩咕遊戲 金樹科技三方聯合主辦的聚勢破界 價值互聯 阿薩石 哩咕遊戲 零界戰線 首場發布會在廣州隆重舉行,又一款重量級的區塊鏈手遊將與玩家見面。零界戰線 是由中外一流遊戲製作班底傾情打造的以區塊鏈為核心的3d即時戰鬥策略手遊,基於區塊鏈去中心化 公開化的特質,解決遊戲領域長...