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