發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
首先簡單的介紹下ORM關(guān)系對象映射的概念。雖然NOSQL現(xiàn)在在迅速崛起,但大多數(shù)人仍然在使用穩(wěn)定的關(guān)系型數(shù)據(jù)庫,我們將數(shù)據(jù)組織成記錄存儲在關(guān)系數(shù)據(jù)庫中,每一行代表一條記錄?,F(xiàn)代編程中,面向?qū)ο蠹夹g(shù)應(yīng)用已經(jīng)非常廣泛,關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)組織形式與面向?qū)ο蟮臄?shù)據(jù)組織形式存在根本上的差異。ORM的任務(wù)就是將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)通過ORM層映射為對象,使之能夠應(yīng)用于面向?qū)ο蟪绦?,方便編程?/a>
它確實為大多數(shù)程序員提供了便利:
1、程序員不需要再動手寫SQL語句,或者說大部分情況下不需要動手寫,只需要調(diào)用一系列函數(shù)即可完成數(shù)據(jù)庫CURD操作。
2、對不同數(shù)據(jù)庫管理系統(tǒng)的連接以及操作進行了抽象,程序員完全可以不考慮使用的是什么數(shù)據(jù)庫以及數(shù)據(jù)庫的版本。
總之,在中小型的項目開發(fā)中,它的確為我們帶來了高效的開發(fā)效率。
以上即是它的優(yōu)點,下面進入正題,即ORM的弊端以及它對數(shù)據(jù)庫優(yōu)化的影響。
缺點:
1、對于復(fù)雜的SQL有心無力。
2.、無法完全屏蔽數(shù)據(jù)庫底層細節(jié)(這也將是下面討論的),開發(fā)人員仍然要熟悉數(shù)據(jù)庫底層操作。
3、關(guān)系-對象映射的實現(xiàn)是以性能為代價,方便了開發(fā),犧牲了效率。
4、多余的工作:大多數(shù)ORM框架為了達到屏蔽某些細節(jié)問題或者對數(shù)據(jù)庫進行抽象,做了很多額外的工作,而這些工作對于大多數(shù)人來說是不需要的。比如,TP的ORM為防止SQL注入,做了很多類似強制類型轉(zhuǎn)換的工作。這樣做不僅僅降低了性能,同時也改變了數(shù)據(jù)本身的意義,對數(shù)據(jù)造成了污染。
ORM對數(shù)據(jù)庫優(yōu)化的影響。
ORM由于其屏蔽了數(shù)據(jù)庫的CURD細節(jié),程序員大多數(shù)情況下不需要再編寫SQL語句,在一個小型的網(wǎng)站中,這樣基本是沒有什么問題的。即使效率低下,如今的硬件水平也可以彌補軟件本身的性能問題。但如果在大型項目中盲目的使用ORM,定會造成性能的低下。原因如下:
1、上面關(guān)于ORM缺點已經(jīng)提到了關(guān)于性能的兩點問題。
2、數(shù)據(jù)庫優(yōu)化問題。
我將會重點解釋數(shù)據(jù)庫優(yōu)化這個影響。
大型項目中,數(shù)據(jù)庫關(guān)系、索引結(jié)構(gòu)等都是經(jīng)過嚴格控制的。程序員編寫的SQL語句直接影響到數(shù)據(jù)庫的執(zhí)行效率(通過影響SQL執(zhí)行計劃),有經(jīng)驗的程序員可以自己動手寫出高效的SQL語句,但毫無經(jīng)驗的程序員可能會使用ORM調(diào)用先關(guān)函數(shù)執(zhí)行數(shù)據(jù)庫操作,或許他能夠獲得好的執(zhí)行計劃,但我們不能將效率交給上帝來決定。
問題出現(xiàn)了, 根據(jù)上面的說法,我們是否需要完全自己動手寫出SQL語句呢?我覺得在性能要求較高的情景中,應(yīng)該是這樣的。ORM雖然屏蔽了SQL語句,提高了開發(fā)效率,同樣的,它也屏蔽了SQL優(yōu)化的細節(jié)。
如果大部分的SQL語句是自己動手寫出來的,這時候ORM框架本身也不在有什么值得我們依賴的優(yōu)勢了。我們既然要自己動手寫出SQL語句,那么就可以自己動手寫出關(guān)系-對象映射的簡單框架。同樣可以實現(xiàn)關(guān)系型數(shù)據(jù)庫與面向?qū)ο缶幊痰倪B接。
以上均是始終不夠的胡謅八扯,要是哪里說錯的,還請指正。
來自: 昵稱10504424 > 《C#》
0條評論
發(fā)表
請遵守用戶 評論公約
一文解析ORM是什么
而有了 ORM 技術(shù)以后,只要提前配置好對象和數(shù)據(jù)庫之間的映射關(guān)系,ORM 就可以自動生成 SQL 語句,并將對象中的數(shù)據(jù)自動存儲到數(shù)據(jù)庫中...
為什么我說ORM是一種反模式
ORM的支持者會辯解說并非每個項目都是如此,并非每個人都需要復(fù)雜的join,并且ORM是一個"80/20"解決方案,其中80%的用戶只需要SQL中20%的功能,ORM可以處理這些問題。ORM最初比編寫基于SQL的...
SQLite學(xué)習(xí)手冊(開篇)
與我們自定義格式的數(shù)據(jù)文件相比,SQLite不僅提供了很好的移植性,如大端小端、32/64位等平臺相關(guān)問題,而且還提供了數(shù)據(jù)訪問的高效性,如基于某些信息建立索引,從而提高訪問或排序該類數(shù)據(jù)的性能,SQ...
淺析ROLAP和MOLAP優(yōu)劣
淺析ROLAP和MOLAP優(yōu)劣。在OLAP技術(shù)文檔中,有兩種主要的類型經(jīng)常被提及,即Multidimensional OLAP (MOLAP)和Relational OLAP (ROLAP),并且為了結(jié)合優(yōu)勢,在兩者的基礎(chǔ)上提出了一種新的類型Hybrid OLAP...
iBATIS In Action:什么是iBATIS(一)
在上一章中我們詳細討論了iBATIS的哲學(xué)觀,以及這個框架的來歷。其次,iBATIS不會影響到既有的應(yīng)用程序或數(shù)據(jù)庫的設(shè)計。iBATIS是為企業(yè)...
深度認識Sharding
但限于 Sharding-JDBC 本身設(shè)計的考慮,數(shù)據(jù)庫層面的主從切換以及主從數(shù)據(jù)同步,Sharding-JDBC 并不負責(zé)。JDBC 驅(qū)動版的優(yōu)點: 輕量,范...
01 | 常見持久層框架賞析,到底是什么讓你選擇 MyBatis?
很多人會將 Hibernate 和 MyBatis 做比較,認為 Hibernate 是全自動 ORM 框架,而 MyBatis 只是半自動的 ORM 框架或是一個 SQL 模板引擎...
Hibernate:強大而廣泛應(yīng)用的老牌OR映射框架
Hibernate:強大而廣泛應(yīng)用的老牌OR映射框架。通過使用Hibernate的注解或XML配置,開發(fā)人員可以定義實體類與數(shù)據(jù)庫表之間的映射關(guān)系,從...
ORM之硬傷 - Kanas.Net Blog - 博客園
園子里有些人,他們真以為自己明白了面向?qū)ο?,然后裝著滿腹經(jīng)綸,侃侃而談,一篇接一篇,不厭其煩地喊著ORM如何如何。如果假定ORM并沒有比傳統(tǒng)的數(shù)據(jù)訪問方式耗費額外的IO的話,除此之外,ORM再沒有任...
微信掃碼,在手機上查看選中內(nèi)容