2009-04-02 14 views
5

यह मुझे व्यक्तिगत अनुभव और SO प्रश्नों और उत्तरों दोनों से लगता है, कि SQL कार्यान्वयन काफी भिन्न होते हैं। एसक्यूएल प्रश्नों के लिए पहले मुद्दों में से एक यह है: आप किस डीबीएमएस का उपयोग कर रहे हैं?एसक्यूएल पोर्टेबिलिटी कितना महत्वपूर्ण है?

एसक्यूएल के साथ ज्यादातर मामलों में एक ही बोली का उपयोग करने के लिए दिए गए प्रश्न को ढांचे के कई तरीके हैं। लेकिन मुझे यह दिलचस्प लगता है कि विभिन्न दृष्टिकोणों की सापेक्ष पोर्टेबिलिटी पर अक्सर चर्चा नहीं की जाती है, न ही जब यह बहुत अधिक मूल्यवान होता है।

लेकिन फिर भी संभावना है कि किसी भी आवेदन या नहीं रूपांतरण के अधीन हो सकता अनदेखी, मुझे लगता है कि होता है कि हम चाहते हैं कि हमारे कौशल, आदतों, और पैटर्न के रूप में पोर्टेबल हो।

एसक्यूएल के साथ आपके काम में, आप मानक एसक्यूएल वाक्यविन्यास को कितनी दृढ़ता से पसंद करते हैं? आप स्वामित्व विविधताओं को कितनी सक्रिय रूप से छोड़ते हैं? कथित बेहतर प्रदर्शन के उद्देश्य के लिए स्वामित्व प्राथमिकताओं के संदर्भ के बिना उत्तर दें, जो अधिकतर स्वीकार करेंगे आमतौर पर पर्याप्त रूप से वैध रक्षा है।

उत्तर

6

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

यह उनके डेवलपर को तेजी से चलाने के लिए एप्लिकेशन डेवलपर पर निर्भर नहीं है, हमारे पास कर्तव्यों का स्पष्ट पृथक्करण है। प्रश्न केवल डीबीएमएस स्वयं या डीबीएमएस के डीबीए ट्यूनिंग द्वारा अनुकूलित किया जाना है।

वास्तविक डेटाबेस, जैसे कि डीबी 2/जेड :-), प्रक्रिया मानक एसक्यूएल बहुत तेज है।

हम इसे लागू करने का कारण ग्राहक पसंद देना है। वे किसी विशिष्ट विक्रेता में लॉक होने के विचार को पसंद नहीं करते हैं।

+0

दिलचस्प, मैंने एसएपी जैसी कंपनियों से इस तरह की चीजें सुनीं। एसक्यूएल स्तर पर विक्रेता स्वतंत्रता की समस्या को हल करने का क्या कारण है? –

+0

यकीन नहीं है कि मैं सवाल पूरी तरह से समझता हूं, @ जेन्स। यदि आप पूछ रहे हैं कि हम मानक-केवल एसक्यूएल क्यों लागू करते हैं, तो यह विक्रेताओं (और प्लेटफॉर्म) के बीच आसान बदलाव की अनुमति देता है। इसलिए, जब MySQL अब इसे घटाता है, तो हम SQL सर्वर, फिर डीबी 2/LUW और अंत में डीबी 2/जेड पर जा सकते हैं। सभी को ऐप बदलने के बिना। – paxdiablo

+0

/* लेकिन ओरेकल को कभी नहीं, जो अभी भी एक खाली स्ट्रिंग और नल के बीच का अंतर नहीं बता सकता :-) */ – paxdiablo

1

कोई स्पष्ट उत्तर नहीं है कि क्या एसक्यूएल पोर्टेबिलिटी वांछनीय है या नहीं है - यह वास्तव में इस तरह के आवेदन के प्रकार के रूप में, स्थिति पर बहुत कुछ निर्भर करता है।

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

आवेदन साइटों की एक संख्या है, जो प्रत्येक अपने स्वयं स्थापित डाटाबेस सिस्टम है पर स्थापित किया जा रहा है, तो जाहिर है एसक्यूएल पोर्टेबिलिटी लोगों के लिए बहुत महत्वपूर्ण है। यह आपको अपने संभावित बाजार को चौड़ा करने देता है, और उन ग्राहकों को दिमाग का थोड़ा सा टुकड़ा दे सकता है जो उनके डेटाबेस सिस्टम के संबंध में बाड़ पर हैं। चाहे आप इसका समर्थन करना चाहते हैं, या आप केवल ओरेकल ग्राहकों, या केवल MySQL/PostgreSQL ग्राहकों को बेचने के लिए खुश हैं, उदाहरण के लिए, आप पर निर्भर है और आप क्या सोचते हैं कि आपका बाजार है।

यदि आप PHP में कोडिंग कर रहे हैं, तो आपके संभावित ग्राहकों का विशाल बहुमत शायद MySQL की अपेक्षा करने जा रहा है। यदि ऐसा है, तो यह MySQL मानने के लिए एक बड़ा सौदा नहीं है। या इसी तरह यदि आप सी #/.NET में हैं तो आप माइक्रोसॉफ्ट एसक्यूएल सर्वर मान सकते हैं। फिर भी, हालांकि, एक फ्लिप पक्ष है क्योंकि PHP या .NET उपयोगकर्ताओं का एक छोटा लेकिन कम प्रतिस्पर्धी बाजार मौजूद हो सकता है जो सामान्य से अन्य डेटाबेस सिस्टम से कनेक्ट करना चाहते हैं।

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

12

मैं मानक/विक्रेता स्वतंत्र एसक्यूएल खिलाफ वोट

  • केवल शायद ही कभी डेटाबेस वास्तव में बंद है।
  • कोई एकल डेटाबेस नहीं है जो वर्तमान एसक्यूएल मानक के अनुरूप है। तो जब भी आप मानक अनुरूप होते हैं, तो आप विक्रेता स्वतंत्र नहीं होते हैं।
  • विक्रेता अंतर एसक्यूएल वाक्यविन्यास से आगे जाते हैं। लॉकिंग व्यवहार अलग है। अलगाव स्तर अलग हैं।
  • डेटाबेस परीक्षण बहुत कठिन और विकसित के तहत है। यदि आपको पूरी तरह से इसकी आवश्यकता नहीं है, तो गेम में कई विक्रेताओं को फेंककर इसे और भी कठिन बनाने की आवश्यकता नहीं है।
  • विक्रेता विशिष्ट tweaks में बहुत सारी शक्ति है।(लगता है कि 'सीमा', या 'विश्लेषणात्मक कार्यों', या 'संकेत')

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

+0

वह दूसरा दावा एक बहादुर है; आपका स्रोत क्या है? यदि आप दावे को औचित्य देंगे या हटा देंगे तो आपके पास एक डाउनवोट है जो मैं खुशी से उलट दूंगा (इसलिए कृपया अनावश्यक रूप से प्रतिशोध न करें)। मुझे भरोसेमंद रूप से सूचित किया गया है कि डीबी 2/जेड सख्ती से अनुरूप है। – paxdiablo

+0

जब तक आपकी परियोजनाएं शुरू नहीं होतीं और शुरुआत से कई डेटाबेस लक्षित करती हैं, स्विचिंग की संभावना कुछ भी नहीं है - पोर्टेबल होने का कोई मतलब नहीं है, मैं –

+0

से सहमत हूं क्या आपने प्रश्न पढ़ा था? 1. मैं पहले से ही डेटाबेस स्विचिंग छूट दी है। 2. क्या आपको लगता है कि कार सुरक्षा उपकरण अप्रासंगिक है क्योंकि कोई कार क्रैशप्रूफ नहीं है? 3. गैर-वाक्यविन्यास अंतर एक लाल हेरिंग हैं। 4. मैंने कई विक्रेताओं में फेंक नहीं दिया। 5. और मैंने एक वैध रक्षा के रूप में प्रदर्शन स्वीकार किया। – dkretz

2

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

मैं भी इस तरह के एसक्यूएल सर्वर में क्वेरी अधिसूचना, जो MySQL प्रदान नहीं करता है के रूप में, कुछ अन्य सर्वर-विशिष्ट कार्यक्षमता का उपयोग करना चाहते। तो फिर, हम इसका उपयोग तब करते हैं जब हम पोर्टेबिलिटी के बारे में चिंता नहीं कर सकते हैं।

इसके अलावा, हमारे ऐप्स के कुछ हिस्सों को स्कीमा जानकारी पूछने और उस पर कार्य करने की आवश्यकता है। यहां, फिर, हमारे पास सबसे कम आम denominator को सीमित करने की कोशिश करने के बजाय, विभिन्न प्रणालियों के लिए सर्वर-विशिष्ट कोड है।

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