इतने सारे प्रोग्रामर ऑब्जेक्ट्स प्रचलित परतों से बिल्कुल नफरत क्यों करते हैं?


9

व्यापकता द्विआधारी क्रमांकन और राइट-फॉरवर्ड लॉगिंग के आधार पर इन-मेमोरी ऑब्जेक्ट मॉडल में एसीआईडी ​​गुण प्रदान करने के लिए एक सरल तकनीक है। यह इस तरह काम करता है:

  • एक स्नैपशॉट के साथ शुरू करो। ऑब्जेक्ट मॉडल को सीरियल करें और इसे एक फाइल पर लिखें।
  • एक जर्नल फ़ाइल बनाएँ। ऑब्जेक्ट मॉडल में प्रत्येक कॉल के लिए, कॉल और उसके तर्कों को क्रमबद्ध करें।
  • जब पत्रिका बहुत बड़ी हो जाती है, तो आप बंद कर रहे हैं, या यह अन्यथा सुविधाजनक है, एक चेकपॉइंट करें: एक नया स्नैपशॉट लिखें और जर्नल को अलग करें।
  • क्रैश या पावर हिट से वापस रोल करने या पुनर्प्राप्त करने के लिए, अंतिम स्नैपशॉट लोड करें और जर्नल में दर्ज सभी कॉल को फिर से निष्पादित करें।

इस कार्य को करने के लिए आवश्यक सावधानियां हैं:

  • परिवर्तनशील वस्तु संदर्भों को भागने न दें या व्यापकता परत में प्रवेश न करें। आपको किसी प्रकार की प्रॉक्सी या ओआईडी योजना की आवश्यकता है, जैसे कि आप आरपीसी कर रहे थे। (यह एक ऐसी आम नौसिखिया गलती है जिसे ' बपतिस्मा समस्या ' का उपनाम दिया गया है ।)
  • एक कॉल से उपलब्ध सभी तर्क पूरी तरह से निर्धारक होना चाहिए, और व्यापार-तर्क-सार्थक I / O या OS कॉल नहीं करना चाहिए। डायग्नोस्टिक लॉग में लिखना शायद ठीक है, लेकिन सिस्टम का समय प्राप्त करना या अतुल्यकालिक प्रतिनिधि को लॉन्च करना आम तौर पर नहीं है। यह इसलिए है ताकि पत्रिका अलग-अलग मशीन पर या अलग समय पर बहाल हो जाए, भले ही वह पहचान फिर से प्रकाशित हो। (अधिकांश प्रचलन कोड लेनदेन टाइमस्टैम्प प्राप्त करने के लिए एक वैकल्पिक समय कॉल प्रदान करता है।)
  • लेखक समचारिता, पत्रिका व्याख्या में अस्पष्टता का परिचय देता है, इसलिए यह निषिद्ध है।

क्या इसलिए कि ...

  • लोग एक परियोजना है कि अच्छी तरह से अनुकूल नहीं था पर एक का उपयोग करने की कोशिश कर के बाद उनके लिए एक बुरी स्वाद विकसित * यह करने के लिए?
  • क्लाऊस वुएस्टफेल्ड की कड़ी वकालत ने लोगों को ठुकरा दिया ?
  • जो लोग प्रोग्रामिंग प्रोग्रामिंग मॉडल को पसंद करते हैं, वे I / O को गणना से अलग करना पसंद करते हैं, I / O के साथ इंटरलेव कम्प्यूटेशन और कॉलिंग थ्रेडिंग के बजाय प्राथमिकता देते हैं?
  • व्यापकता की परतें वैचारिक रूप से सरल और इतनी सहज रूप से उस ढाँचे की विशेषताओं से जुड़ी होती हैं, जिसमें वे निवास करते हैं कि वे आमतौर पर इस परियोजना के लिए कस्टम-रोल किए जाते हैं, जो उन्हें बहुत अधिक विदेशी / अमानवीय / जोखिम भरा बनाता है?
  • यह सिर्फ इतना है कि आप क्या करने के लिए सावधान रहना होगा सीधे रखने के लिए मुश्किल है?
  • newbies के सिर बस विस्फोट करने के लिए प्रतीत होता है जब कुछ ऐसा होता है जो दो-स्तरीय डेटाबेस-संचालित ऐप के समान नहीं है जो उन्होंने स्कूल में लिखना सीखा है? ;)

* रैम में पूरे डेटा सेट फिट , आप लेखक संगामिति की जरूरत नहीं है, और आप एक डेटा गोदाम के लिए एड-हॉक क्वेरी, रिपोर्टिंग, या निर्यात करने की ज़रूरत नहीं है। SQLite के लिए माफी के साथ, प्रचलन बचत-फाइलों पर एक सुधार है, ओरेकल के लिए एक प्रतिस्थापन नहीं है।


अहा। मुझे आश्चर्य हुआ कि क्या इसका कोई नाम है। यह हमेशा मेरे लिए समझ में आता है, मेरे पास इसके लिए कभी कोई नाम नहीं था।
ग्रेफेड 3

9
तुम्हारी किस बारे में बोलने की इच्छा थी?
TheLQ

यह मैंने पहली बार सुना है। यह क्या है?
जोन सेप

स्पष्टीकरण जोड़ा गया।
जेफरी हेंटिन

1
ओह्ह .. मुझे अवधारणा पता है लेकिन मैंने पहले कभी ऐसा नहीं किया है। मेरे लिए बहुत सुंदर लग रहा है। मुझे पूरा यकीन है कि यह देवों का बहुत कुछ नहीं है "बिल्कुल नफरत"।
जोन

जवाबों:


6

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

एक और हिस्सा यह है कि यह पूरी तरह से दिखता है जैसे कि कस्टम डेटा स्टोरेज के कुछ अधिक दर्दनाक बिट्स जो आप 10+ साल पहले ढूंढते थे और उनमें से कुछ समान हैं (उदाहरण के लिए बैच अपडेटेड btreive सोचें) जो आपके काम में लाता है "बहुत कस्टम" बिंदु, लेकिन इसके साथ विनम्रता से काम करने वाले शेल्फ भागों का पता लगाना भी मुश्किल हो जाता है।

अंतिम भाग यह है कि उन्हें कई मामलों में क्वेरी करना मुश्किल हो सकता है और सामान्य रूप से लोग उनके जवाब पाने में सक्षम होने के लिए बहुत आदी हैं।


11

मुझे लगता है कि आपको पहले यह प्रदर्शित करने की आवश्यकता है कि इतने सारे डेवलपर्स उन्हें पूरी तरह से नफरत करते हैं। मुझे नहीं लगता कि ऐसा है। कुछ समय पहले, उस फाउलर पर विचार करें, यहाँ इसके लिए एक तरह का एक पैटर्न तैयार किया गया था


हाँ, मैं थोड़ा उलझन में हूँ। वे एक महान उपकरण की तरह दिखते हैं यदि आप उन्हें सही कारण के लिए उपयोग करते हैं।
मैट ओलेनिक

मैं सिर्फ यह कह रहा हूं क्योंकि मैंने सहकर्मियों से इस पर पूरी तरह से दु: ख की एक अद्भुत राशि पकड़ी है।
जेफरी हेंटिन

1
@ जेफ्री हंटिन: वे आलसी और बंद दिमाग वाले लगते हैं।
स्टीवन एवर्स

1
ओह, और पैटर्न की वास्तविक आधारशिला है c2.com/cgi/wiki?TransactionTape
जेफरी

4

प्रश्न का उत्तर यह है कि जबकि सिद्धांत सरल है अभ्यास नहीं है।

बस इस तरह के सेटअप का परीक्षण करने के लिए दर्जनों परीक्षण मामलों की आवश्यकता होती है, म्यूटली प्रक्रिया या मल्टी थ्रेडेड कोड में जोड़ें और यह सैकड़ों संभावित स्थितियों में कूदता है जिन्हें परीक्षण करने की आवश्यकता होती है, दोनों दृढ़ता और वसूली के लिए।

CICS, Tuxedo, Weblogic, Websphere, JBOSS या .NET जैसे कोई भी ट्रांज़ेक्शन मॉनीटर इन सभी सुविधाओं को स्वच्छ और परीक्षण तरीके से प्रदान करेगा। और कोई भी डेटाबेस अधिकांश अनुप्रयोगों के लिए "पर्याप्त" लेनदेन / दृढ़ता प्रदान करेगा।

इसका ज्यादातर मामला उस पहिये का आविष्कार किया गया था और बहुत समय पहले पूरा हुआ था।


यह, और कई "आर्किटेक्ट्स" की प्रवृत्ति के लिए एक पसंदीदा "स्वाद" है कि वे किसी भी चीज पर जोर देते हैं, चाहे वह डिजाइन उस समस्या के लिए कितना अनुचित हो, जिसे हल करने की आवश्यकता हो।
बजे jwenting

@jwenting तो क्या यह 'स्पष्ट वकालत' बिंदु के तहत आता है?
जेफरी हेन्टिन

2

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.