ORM映射的弊端以及它對數據庫優化影響

首先簡單的介紹下ORM關係對象映射的概念。雖然NOSQL現在在迅速崛起,但大多數人仍然在使用穩定的關係型數據庫,我們將數據組織成記錄存儲在關係數據庫中,每一行代表一條記錄。現代編程中,面向對象技術應用已經非常廣泛,關係型數據庫的數據組織形式與面向對象的數據組織形式存在根本上的差異。ORM的任務就是將關係型數據庫中的數據通過ORM層映射爲對象,使之能夠應用於面向對象程序,方便編程。


它確實爲大多數程序員提供了便利:

1、程序員不需要再動手寫SQL語句,或者說大部分情況下不需要動手寫,只需要調用一系列函數即可完成數據庫CURD操作。

2、對不同數據庫管理系統的連接以及操作進行了抽象,程序員完全可以不考慮使用的是什麼數據庫以及數據庫的版本。

總之,在中小型的項目開發中,它的確爲我們帶來了高效的開發效率。


以上即是它的優點,下面進入正題,即ORM的弊端以及它對數據庫優化的影響。

缺點:

1、對於複雜的SQL有心無力。

2.、無法完全屏蔽數據庫底層細節(這也將是下面討論的),開發人員仍然要熟悉數據庫底層操作。

3、關係-對象映射的實現是以性能爲代價,方便了開發,犧牲了效率。

4、多餘的工作:大多數ORM框架爲了達到屏蔽某些細節問題或者對數據庫進行抽象,做了很多額外的工作,而這些工作對於大多數人來說是不需要的。比如,TP的ORM爲防止SQL注入,做了很多類似強制類型轉換的工作。這樣做不僅僅降低了性能,同時也改變了數據本身的意義,對數據造成了污染。


ORM對數據庫優化的影響。

ORM由於其屏蔽了數據庫的CURD細節,程序員大多數情況下不需要再編寫SQL語句,在一個小型的網站中,這樣基本是沒有什麼問題的。即使效率低下,如今的硬件水平也可以彌補軟件本身的性能問題。但如果在大型項目中盲目的使用ORM,定會造成性能的低下。原因如下:

1、上面關於ORM缺點已經提到了關於性能的兩點問題。

2、數據庫優化問題。


我將會重點解釋數據庫優化這個影響。

大型項目中,數據庫關係、索引結構等都是經過嚴格控制的。程序員編寫的SQL語句直接影響到數據庫的執行效率(通過影響SQL執行計劃),有經驗的程序員可以自己動手寫出高效的SQL語句,但毫無經驗的程序員可能會使用ORM調用先關函數執行數據庫操作,或許他能夠獲得好的執行計劃,但我們不能將效率交給上帝來決定。

問題出現了, 根據上面的說法,我們是否需要完全自己動手寫出SQL語句呢?我覺得在性能要求較高的情景中,應該是這樣的。ORM雖然屏蔽了SQL語句,提高了開發效率,同樣的,它也屏蔽了SQL優化的細節。

如果大部分的SQL語句是自己動手寫出來的,這時候ORM框架本身也不在有什麼值得我們依賴的優勢了。我們既然要自己動手寫出SQL語句,那麼就可以自己動手寫出關係-對象映射的簡單框架。同樣可以實現關係型數據庫與面向對象編程的連接。


以上均是始終不夠的胡謅八扯,要是哪裏說錯的,還請指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章