2010-02-09 21 views
9

मैंने अभी तक ओआरएम यात्रा शुरू नहीं की है,क्या जटिल परियोजनाओं के लिए ओआरएम उपयुक्त है?

क्योंकि मुझे यकीन नहीं है कि यह परियोजना कितनी जटिल हो जाती है जब यह काम करता है।

आपकी राय या अनुभव क्या है?

उत्तर

4

जब इस परियोजना इसे और भी बेहतर है, क्योंकि यह की अमूर्त की एक ही स्तर पर सब कुछ रखने के लिए, बल्कि वस्तुओं से एसक्यूएल पर कूद से जाने और अधिक जटिल हो जाता है। हमने आवेदन को विकसित करने के लिए एक बार पैराल में अपनी परत लिखी है (क्योंकि हम किसी भी पारंपरिक ओआरएम का उपयोग नहीं कर सके), और जितना अधिक शक्तिशाली हो गया, आसान प्रबंधन अनुप्रयोग बन गया।

प्रदर्शन चिंताओं आमतौर पर आप अतिरंजित होते हैं। यह आमतौर पर अलग-अलग जगह पर होता है, तो आप उम्मीद करेंगे। हमारे पास पाइथन में लिखी गई कुछ खराब अबास्ट्रक्शन परत थी, और यह बहुत अच्छा काम कर रही थी। क्या चूस गया, यूआरएल लाइब्रेरी थी, जिसे हमें सी में फिर से लिखना था। वास्तव में, आप हमेशा प्रश्नों को अनुकूलित कर सकते हैं, जो अंत में सबसे महत्वपूर्ण हैं, इस समय एसक्यूएल को हाथ से लिखते हुए, जब आप देखते हैं, तो उस प्रदर्शन को इसकी आवश्यकता होती है। लेकिन ज्यादातर बार - आपको नहीं करना होगा।

+1

मुझे पता है कि यह विकास को तेज करेगा, लेकिन प्रदर्शन कैसे होगा? – user198729

+1

ओआरएम आमतौर पर प्रदर्शन को गति देता है। उदाहरण के लिए, ओआरएम का सबसे अधिक उपयोग हाइबरनेट है। हाइबरनेट आपको जो चाहिए उसे पूरा करने के लिए कवर के तहत सबसे कुशल एसक्यूएल बनाने के बारे में अच्छा काम करता है। –

1

मेरी राय बड़ा परियोजनाओं के लिए बनाया ORM में, प्रयास और विकास समय को कम करने के लिए।

लेकिन अगर आप एक आवेदन जो बहुत उच्च गति डेटा एक्सेस कोड की जरूरत है विकसित कर रहे हैं, तो आप ORMs से बचने के लिए के रूप में आप क्योंकि ORMs आपके आवेदन

5

यह व्यक्तिपरक है में एक नई परत को जोड़ सकते हैं की जरूरत है। मेरा जवाब विशेष रूप से स्वचालित ORM टूल्स के बारे में है।

मेरे पास निम्नलिखित कारणों से ओआरएम टूल्स के लिए दार्शनिक आपत्ति है:
1- एक तालिका एक व्यावसायिक वस्तु के लिए एक-से-एक मैपिंग आवश्यक नहीं है और नहीं होना चाहिए।
2- बेस सीआरयूडी/बिजनेस ऑब्जेक्ट कोड लिखने के लिए उबाऊ है, लेकिन यह आपके आवेदन के लिए महत्वपूर्ण है। मैं बल्कि नियंत्रण में रहूंगा और इसका ज्ञान रखूंगा। (थोड़ा एनआईएच सिंड्रोम)
3- एक नया डेवलपर आने वाला एक पारंपरिक ऑब्जेक्ट मॉडल सीखने में आसान समय होगा, जो कि ओआरएम उपकरण द्वारा जो भी विचित्र वाक्यविन्यास बनाया गया है।

5

ORM। निश्चित रूप से, ऑब्जेक्ट-रिलेशनल मैपिंग है।

इसका मतलब है कि आप वस्तुओं एक वस्तु उन्मुख प्रोग्रामिंग भाषा से प्रयोग करने योग्य में एक संबंधपरक डेटाबेस में संग्रहीत डेटा को बदलने चाहिए।

ऑब्जेक्ट्स कुछ विधियों की आपूर्ति कर सकते हैं जिनमें डेटा प्रोसेसिंग और अन्य ऑब्जेक्ट्स की खोज शामिल हो सकती है।

यह वह जगह है जहां समस्याएं शुरू होती हैं।

डाटा प्रोसेसिंग ORM पक्ष पर लागू किया जा सकता है, या डेटाबेस की ओर ((, डेटाबेस से डेटा लोड हो रहा वस्तु wraparound लागू करने और प्रोग्रामिंग भाषा का उपयोग क्यों तरीकों को लागू करने, जिसका मतलब है) जब डाटा प्रोसेसिंग आदेश डेटाबेस के लिए एक क्वेरी के रूप में जारी किए जाते हैं)।एक क्लाइंट-साइड ar में

SELECT * 
FROM Accounts 
WHERE user_id = @me 

में $MyAccount

, तो

SELECT * 
FROM Transactions 
WHERE account_id = @myaccount 

:

MyAccount->Transactions()->GetLast() 

यह दो तरह से लागू किया जा सकता:

इसकी तुलना रे @Transactions

, तो अंतिम पाने के लिए $Transactions[-1]

यह अक्षम तरीका है, और आप इसे अधिक ध्यान में रखते हुए इसे नोटिस करेंगे।

वैकल्पिक रूप से, एक चतुर ORM इस में परिवर्तित कर सकते हैं:

SELECT TOP 1 Transactions.* 
FROM Accounts 
JOIN Transactions 
ON  Transactions.Account = Accounts.id 
WHERE Accounts.UserID = @me 
ORDER BY 
     Transactions.Date DESC 

, लेकिन यह एक सच में स्मार्ट ORM हो गया है।

तो सवाल का जवाब "क्या ORM का उपयोग करना है या नहीं" प्रश्न का उत्तर है "क्या मेरे ORM मुझे डेटाबेस पर सेट-आधारित संचालन जारी करने की आवश्यकता होनी चाहिए"?

+0

वास्तव में स्मार्ट 'ORM' के लिए उम्मीदवार क्या है जो कभी गलती नहीं करेगा? – user198729

+0

@ user198729: यह अभी तक लिखा नहीं है। यहां तक ​​कि डेटाबेस अनुकूलक भी अपूर्ण निर्णय लेते हैं। – Quassnoi

+1

लिंक से एसक्यूएल/एंटिटी फ्रेमवर्क इस सरल जुड़ने/जहां मामले को बेहतर तरीके से संभालने में सक्षम हैं। बेशक, कई और अधिक स्थितियां हैं जिनमें वे उप-इष्टतम या निचले भयानक एसक्यूएल उत्पन्न करते हैं। – Aaronaught

1

ओआरएम बड़ी परियोजनाओं के लिए आदर्श हैं क्योंकि वे डेटाबेस पक्ष में बदलाव से सुरक्षा की एक परत प्रदान करते हैं, और नई सुविधाओं को जोड़ने की प्रक्रिया को तेज करते हैं। यदि प्रदर्शन कोई समस्या बन जाता है, तो आप उस प्रश्न पर अपने डेटा तक पहुंचने के लिए एक अलग विधि का उपयोग कर सकते हैं जहां आपको आवेदन में हर क्वेरी को हाथ-अनुकूलित करने के बजाय बाधा आती है।

+0

** आपके द्वारा वर्णित ** अलग-अलग विधि ** क्या हैं? – user198729

+0

मेरे मामले में, ज्यादातर संग्रहीत प्रक्रियाओं। यह कुछ मामलों में ओआरएम परत को बाईपास करने के लिए सुरुचिपूर्ण प्रतीत हो सकता है, लेकिन दूसरों के रूप में नहीं, यह किसी भी बड़े अनुप्रयोग की तरह है - जब भी आप कर सकते हैं, अपने डिज़ाइन पर चिपके रहें, और केवल अत्यधिक बम कोड के अनुभागों पर स्विच करें जहां यह आपको वास्तविक देगा फायदा। –

+0

लेकिन ज्यादातर मामलों में यह तब तक आसान नहीं होगा जब आप पहले से ही ढांचे का उपयोग करते हैं ... – user198729

4

आप क्या मंच आप उपयोग कर रहे उल्लेख नहीं है, लेकिन अगर मैं एक ORM का उपयोग किए बिना .NET में किसी डेटाबेस से एक रिकॉर्ड को पढ़ने के लिए चाहता था, मैं करने के लिए होगा:

  1. एक कनेक्शन पढ़ें स्ट्रिंग
  2. ओपन डेटाबेस कनेक्शन
  3. ओपन कनेक्शन के खिलाफ एक कमान वस्तु
  4. मेरे रिकार्ड पढ़ें (द्वारा कमान वस्तु के खिलाफ एक एसक्यूएल बयान निष्पादित)
  5. कि रिकॉर्ड एक वस्तुकरने के लिए रूपांतरण चुनाव
  6. की मेरी भाषा मेंबंद मेरी क्वेरी
  7. बंद मेरे कनेक्शन

ध्वनि जटिल? एक ओआरएम स्वचालित रूप से कवर के तहत सभी चीजों को करता है, और मुझे केवल कोड की कुछ पंक्तियों की आवश्यकता होती है। इसके अतिरिक्त, क्योंकि ओआरएम को आपके डेटा मॉडल का ज्ञान है, यह कभी-कभी कैशिंग और आलसी लोडिंग जैसे अनुकूलन निष्पादित कर सकता है।

+1

लेकिन, एक बड़ी परियोजना पर निष्पक्ष होने के लिए, आप संभवतः केवल 1,2,3,4,6,7 नंबरों का समर्थन करने के लिए कोड लिखने जा रहे हैं और आपको केवल अपने प्रश्न और अपनी वस्तु हाइड्रेशन लिखने की आवश्यकता होगी कोड। –

+3

@ जैकोब: मुझे लगता है कि आप उन व्यवहारों को समाहित कर सकते हैं, लेकिन आप उस समय अपने स्वयं के ओआरएम लिख रहे हैं। –

+1

सच है। जब कोई ओआरएम पर मेरी राय के बारे में पूछता है तो मैं "स्वचालित ओआरएम उपकरण" के साथ "ओआरएम" को समानता देता हूं। –

10

यह सवाल कभी-कभी जवाब देने में मुश्किल होता है। आपने पहले Object-Relational Impedance Mismatch के बारे में सुना होगा; यही वह मुद्दा है जो ओआरएम उपकरण हल करने का प्रयास करते हैं, लेकिन यह समस्याओं से भरा हुआ है। यह उन स्थितियों में से एक है जहां आप बहुत कम समय में 90% समस्या का समाधान कर सकते हैं, लेकिन वहां से प्रत्येक अतिरिक्त 1% सभी निर्भरताओं की वजह से जटिलता में तेजी से बढ़ता प्रतीत होता है।

एक ORM ढांचे एक अमूर्त है, और कई बिंदुओं पर एक टपकाया अमूर्त हो जाता है:

  • परिसर प्रश्नों के लिए/UDTs, सीटीई, क्वेरी संकेत, अस्थायी टेबल, विंडोइंग काम करता है, आदि

    तरह अवधारणाओं को शामिल लिपियों
  • प्रदर्शन-अनुकूलित क्वेरी। चूंकि क्वास्नोई ने अपने उत्तर में उल्लेख किया है, ओआरएम इस पर बेहतर हो रहे हैं लेकिन अक्सर उप-इष्टतम प्रश्न उत्पन्न करते हैं, और कभी-कभी प्रभाव बेहद ध्यान देने योग्य होता है।

  • लेनदेन प्रबंधन - यूनिट-ऑफ-वर्क पैटर्न केवल तब तक आपको प्राप्त कर सकता है जब आपको बड़े बैच अपडेट से निपटना होगा।

  • क्रॉस-डेटाबेस या क्रॉस-सर्वर क्रियाएं। कामकाज हैं, लेकिन वे सिर्फ यही हैं - कामकाज। कोई ओआरएम मैंने वास्तव में यह अच्छी तरह से संभाला नहीं देखा है।

  • बहु-तालिका विरासत - इस विरासत का केवल रूप है कि वास्तव में सामान्यीकृत है है, और यह वास्तव में शुद्ध एसक्यूएल और मैनुअल मानचित्रण का उपयोग को प्रबंधित करने के लिए मुश्किल नहीं है, लेकिन हे/आर मानचित्रकारों इसे घटिया हैं। हम में से कई लोगों के लिए, एकल-टेबल विरासत स्वीकार्य विकल्प नहीं है।

वे कुछ ऐसे क्षेत्र हैं जहां ओ/आर मैपर हमें असफल लगते हैं। कहा जाता है कि, इसका मतलब यह नहीं है कि ओ/आर मैपर बड़ी परियोजनाओं के लिए "फिट" नहीं हैं।

मेरी राय में, सामान्य रूप से ओआरएम और ओ/आर मैपर विशेष रूप से महत्वपूर्ण परियोजनाओं के लिए महत्वपूर्ण हैं। वे भारी मात्रा में प्रयासों को बचाते हैं और आपको उस समय के एक हिस्से में आवेदन करने में मदद कर सकते हैं, जो आपको अन्यथा ले जाएगा। वे सिर्फ पूरे समस्या को हल नहीं करते हैं। आपको यह देखने के लिए तैयार होना होगा कि ओआरएम वास्तव में क्या कर रहा है, और आपको स्थिति के लिए कॉल करते समय शुद्ध एसक्यूएल पर वापस जाने के लिए तैयार रहना होगा (यानी उपर्युक्त स्थितियों में)।

लिंकक से एसक्यूएल जैसे कुछ ढांचे, आप ऐसा करने की उम्मीद करते हैं और आपको उसी कनेक्शन पर आदेशों या संग्रहीत प्रक्रियाओं को निष्पादित करने के लिए तैयार किए गए सुविधाएं प्रदान करते हैं और उसी लेनदेन में मैपर के "नियमित" कर्तव्यों के लिए उपयोग किए जाते हैं। एल 2 एस एकमात्र ढांचा नहीं है जो आपको ऐसा करने देता है, लेकिन कई अधिक प्रतिबंधित हैं, और आप जो भी चाहते हैं उसे पाने के लिए आप कई हुप्स के माध्यम से कूदते हैं। ओआरएम चुनते समय, मुझे लगता है कि अमूर्तता को बाईपास करने की क्षमता कम से कम आज एक महत्वपूर्ण विचार है।

मुझे लगता है कि इस प्रश्न का सबसे अच्छा जवाब यह है: हां, वे बड़ी परियोजनाओं के लिए उपयुक्त हैं, जब तक कि आप उन पर विशेष रूप से भरोसा न करें। अपनी ओआरएम उपकरण की सीमाओं को जानें, जब आप कर सकते हैं तो 90% उदाहरणों में समय-बचतकर्ता के रूप में इसका उपयोग करें, और सुनिश्चित करें कि आप और आपकी टीम समझते हैं कि वास्तव में उन उदाहरणों के लिए हुड के नीचे क्या चल रहा है जब अमूर्त रिसाव ।

0

ओआरएम अच्छा है यदि आप वेब एप को जल्दी से ग्राहक विकास करने के लिए पंप करना चाहते हैं और देखें कि लोग वास्तव में आपके उत्पाद का उपयोग करते हैं या नहीं।

http://www.youtube.com/watch?v=uFLRc6y_O3s

आखिरी विषय है कि जोश Berkus की चर्चा "रनअवे ORM के" है। इसे 37:20 पर देखें।

संबंधित मुद्दे