2010-10-24 25 views
3

可能重複:
Using an ORM or plain SQL?ORM還是直SQL?

你會選擇使用ORM或某種家裏紡DAL的?爲什麼?

ORM的優勢顯而易見 - 更好的結構/組織,更好的語言適應性等。但是我擔心性能問題。任何人都有戰爭故事要分享?任何關於不那麼明顯的風險或獎勵的見解都將不勝感激。

回答

5

我會用你提到的原因使用ORM。

它們通常表現良好。如果某個領域存在性能問題,那麼您可以隨後優化該部分,或者如果真的有幫助,則可以切換爲直接SQL,因爲這兩種技術並不相互排斥。

+1

+1強調ORMs /純SQL如何不是相互排斥的。 – 2010-10-24 00:09:23

+0

是的...大多數ORM都有一個函數,可以讓你直接寫SQL。 – mpen 2010-10-24 00:16:38

4

我只是把這留作我的個人意見,因爲這是一個神聖的話題。我每次開始一個項目並嘗試一個ORM(無論是L2SQL,Subsonic,EF NHibernate等),我總是最終將它作爲某個點而廢棄,並用sprocs手動重寫DAL。

ORM對於快速腳手架來說非常方便,但是如果您正確設計實體層,插入新的數據訪問層非常簡單,而且遇到太多問題,我要麼與ORM對抗做我要麼,或者ORM只是簡單地做一些愚蠢的事情(N + 1查詢,或者當我真的只需要主鍵查找等時拉下相關表)。

+0

我發現CakePHP對此非常糟糕,但是Django實際上做得非常好。一段時間後,你必須引導它朝着正確的方向發展,但它們也有控制它的功能。 – mpen 2010-10-24 00:18:07

0

我會(並且確實)選擇使用ORM,並瞭解它如何運行得足夠好,以儘可能地擠出更多的性能。

例如;大多數ORM允許您使用大量存儲過程/服務器功能,因此您可以在最佳位置運行高度優化的代碼。但你必須知道如何/何時做到這一點。

還有一些技術可以用於ORM表面之下。例如,編譯LINQ to SQL查詢。

我想很多時候,滾動自己的DAL可以最終沒有更好的性能明智,只是因爲人們試圖重新創建大量的樣板代碼。

0

我會說使用ORM。起初我有點反對他們,因爲直接編寫SQL對於簡單的項目來說非常簡單,我沒有看到額外的好處。但隨着項目的增長,查詢變得更加複雜。特別是對於像hierarchies這樣的東西...如果你的ORM支持這些類型的東西,它確實可以節省很多時間。

如果您擔心性能問題,請等到它開始成爲問題,然後檢查您的ORM生成的SQL並使用它的raw_sql函數更有效地重寫它,或者使用其他輔助方法來哄騙它在正確的方向。

0

它很大程度上取決於應用程序,它的規模有多大,如果你擔心性能,那麼你與編程語言有相同的困境,恕我直言,ORM對你已經說過的reaseon來說真的很棒,但它們作爲一切)有bounderies,其中大多數的性能,你最終將不得不處理查詢,只要你稱他們SQL或HQL或ANY_OTHER_SUTFF_QL,

我的建議,如果你選擇ORM然後嘗試利用其所有功能許多項目結束使用ORM和只是保存更新刪除而不使用層次模式或緩存改進

0

如果任何業務需求滿足,我會感到驚訝由任一選擇編輯。我也懷疑有很多缺陷可以直接歸因於任何一種選擇。

就我個人而言,我發現將數據導入和導出數據源非常容易,而且通常不會花費大量時間,但這可能就是我。

我會說,除非你有強烈的偏好,否則它可能無所謂。

0

我認爲這取決於你正在做什麼樣的項目。如果您使用某種OO語言進行編程,那麼使用ORM可能是一個好主意。但是如果你的項目比較低級,或者你對性能非常擔心(我相信設計良好的ORM不會給你帶來不好的表現),那麼直接的sql可能是最好的選擇。