दिलचस्प पोस्ट
मैं कैसे jQuery में एक एनीमेशन लगातार लूप कर सकते हैं? मेरा सत्र कब तक खत्म होगा? स्ट्रिंग "Per" के साथ पर्ल में "vs" बनाम "==" 2 अंक, वैकल्पिक दशमलव, दो अंक से मेल करने के लिए रेगेक्स असमर्थितऑपरेशन अपवाद: एप्लिकेशन को जेडीबीसी कनेक्शन की आपूर्ति करनी चाहिए क्या एक कार्यक्रम संकलन के दौरान लाइब्रेरी पर निर्भर करता है, लेकिन रनटाइम नहीं? फ़्रेमवर्क के लिए रनटाइम लक्ष्य नहीं मिल सकता। NETCoreApp = v1 एक लक्ष्य रनटाइम्स के साथ संगत है मैं एक उथले क्लोन से क्यों नहीं पुल सकता हूं? कुकी कैसे हटाना है? एंड्रॉइड एमुलेटर परिदृश्य को घूमते नहीं हैं ListView में कस्टम फ़िल्टरिंग ArrayAdapter आईफ़ोन पर एक फाइल में प्रवेश करना कैसे vb.net में अपने शीर्ष लेख के साथ डेटाग्रिड दृश्य तालिका को मुद्रित करें? क्या एक .h फ़ाइल में जाना चाहिए? अजगर में सुरक्षित क्रेडेंशियल स्टोरेज

गैर-रिलेशनल डाटाबेस डिज़ाइन

मुझे आपके द्वारा गैर-रिलेशनल "एनओएसक्यूएल" डेटाबेस के साथ उपयोग की जाने वाली डिजाइन रणनीतियों के बारे में सुनने में दिलचस्पी है – अर्थात, (ज्यादातर नए) वर्ग के डेटा स्टोर जो पारंपरिक रिलेशनल डिजाइन या एसक्यूएल (जैसे हाइपरटेबल, सीचडीबी, सरलडिब, Google ऐप इंजन डाटास्टोर, वोल्डेमॉर्ट, कैसांद्रा, एसक्यूएल डाटा सर्विसेज आदि)। उन्हें अक्सर "कुंजी / मूल्य स्टोर" के रूप में संदर्भित किया जाता है, और आधार पर वे बड़े पैमाने पर लगातार वितरित लगातार हैश तालिकाओं की तरह काम करते हैं।

विशेष रूप से, मैं इन नए डेटाबेस के साथ वैचारिक डेटा डिजाइन में अंतर के बारे में जानना चाहता हूं। क्या आसान है, क्या कठिन है, बिल्कुल क्या नहीं किया जा सकता है?

  • क्या आप वैकल्पिक डिजाइनों के साथ आते हैं जो गैर-संबंधपरक दुनिया में बेहतर काम करते हैं?

  • क्या आपको लगता है कि असंभव लगता है कुछ के खिलाफ अपने सिर मारा?

  • क्या आपने किसी भी डिजाइन पैटर्न के साथ अंतराल को पार कर लिया है, जैसे एक से दूसरे में अनुवाद करने के लिए?

  • क्या आप अभी भी स्पष्ट डेटा मॉडलों को भी (जैसे यूएमएल में) करते हैं या आपने उन्हें पूरी तरह से अर्द्ध-संरचित / दस्तावेज-उन्मुख डाटा के पक्ष में दबा दिया है?

  • क्या आप आरडीबीएमएस की प्रमुख अतिरिक्त सेवाओं में से कोई भी याद नहीं करते हैं, जैसे कि रिलेशनल अखंडता, मनमाने ढंग से जटिल लेनदेन समर्थन, ट्रिगर आदि?

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

एफवाईआई, यहां इसी तरह के विषयों पर स्टैक ऑवरफ्लो चर्चाएं हुई हैं:

  • डेटाबेस की अगली पीढ़ी
  • Google App Engine के साथ काम करने के लिए स्कीमा बदल रहा है
  • एक दस्तावेज़-उन्मुख डेटाबेस चुनना

Solutions Collecting From Web of "गैर-रिलेशनल डाटाबेस डिज़ाइन"

मुझे लगता है कि आपको यह विचार करना होगा कि गैर-रिलेशनल डीबीएमएस उनके डेटा मॉडल के बारे में काफी भिन्न हैं और इसलिए वैचारिक डेटा डिजाइन भी बहुत अलग होगा। NOSQL Google समूह के गैर-रिलेशनल डेटाबेस में थ्रेड डेटा डिज़ाइन में अलग-अलग मानदंडों को इस प्रकार वर्गीकृत किया जाता है:

  1. बिगटेबल-जैसी सिस्टम (एचबीज़, हाइपरटेबल, आदि)
  2. कुंजी-मान स्टोर (टोक्यो, वोल्डेमॉर्ट, आदि)
  3. दस्तावेज़ डेटाबेस (काउचडीबी, मोंगोडीबी, आदि)
  4. ग्राफ डाटाबेस (एलेग्राइफ्राफ, नेओ 4 जे, तिल, आदि)

मैं ज्यादातर ग्राफ़ डेटाबेस में हूं, और इस प्रतिमान का उपयोग करते हुए डेटा डिजाइन की सुंदरता थी, जो मुझे वहां लाया, आरडीबीएमएस की कमियों से थक गया। मैंने इस विकी पृष्ठ पर ग्राफ़ डेटाबेस का उपयोग करते हुए डेटा डिज़ाइन के कुछ उदाहरण डाला है और इस बात का एक उदाहरण है कि मूल आईएमडीबी मूवी / अभिनेता / भूमिका डेटा को भी कैसे मॉडल करना है

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

ग्राफ़डब बिंदु दृश्य से विशिष्ट प्रश्नों का उत्तर देते हुए:

वैकल्पिक डिजाइन: बिना किसी चिंताओं के कई अलग-अलग प्रकार के संस्थाओं के संबंधों को जोड़ने या पूर्वनिर्धारित करने की ज़रूरत है जो संस्थाओं को जुड़ा हो सकता है।

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

स्पष्ट डेटा मॉडल: मैं यह सब समय (व्हाइटबोर्ड शैली) करता हूं, और उसके बाद मॉडल का उपयोग करें क्योंकि यह डीबी में भी है।

RDBMS दुनिया से मिस: रिपोर्ट बनाने के लिए आसान तरीके अपडेट: शायद यह ग्राफ डेटा डेटाबेस से रिपोर्ट बनाना मुश्किल नहीं है , देखें एक नियो 4 जे नमूना डेटाबेस के लिए एक रिपोर्ट बनाना ।

मैंने केवल गैर-रिलेशनल डीबी के साथ शुरू किया है, और मैं अभी भी अपने सिर को चारों ओर लपेटने की कोशिश कर रहा हूं और यह पता चलेगा कि सबसे अच्छा मॉडल कैसा होगा। और मैं केवल काउचडीबी के लिए बोल सकता हूं

फिर भी, मेरे पास कुछ प्रारंभिक निष्कर्ष हैं:

क्या आप वैकल्पिक डिजाइनों के साथ आते हैं जो गैर-संबंधपरक दुनिया में बेहतर काम करते हैं?

डिज़ाइन फ़ोकस पाली: दस्तावेज़ मॉडल (डीबी तालिकाओं के अनुरूप) का डिजाइन लगभग अप्रासंगिक हो जाता है, जबकि सब कुछ विचारों को डिजाइन करने पर निर्भर करता है (क्वेरी से संबंधित)।

दस्तावेज़ डीबी प्रकार की जटिलताओं को स्वैप: एसक्यूएल में अनम्य डेटा और लचीला प्रश्न हैं, दस्तावेज़ डीबी अन्य तरीके हैं।

CouchDB मॉडल "JSON दस्तावेज़" का एक संग्रह है (मूल रूप से नेस्टेड हैश टेबल)। प्रत्येक दस्तावेज़ में एक अद्वितीय आईडी है, और ID द्वारा तुच्छ को पुनर्प्राप्त किया जा सकता है। किसी भी अन्य क्वेरी के लिए, आप "विचार" लिखते हैं, जिन्हें मैप / कम फ़ंक्शन के सेट नाम दिए गए हैं। विचार कुंजी / मान जोड़े की सूची के रूप में एक परिणाम सेट लौटाते हैं।

चाल यह है कि आप डेटाबेस को एक एसक्यूएल डेटाबेस से पूछते हुए क्वेरी से नहीं पूछते हैं: दृश्य फ़ंक्शन चलाने के परिणाम एक सूचकांक में जमा किए जाते हैं, और केवल सूचकांक से पूछताछ की जा सकती है। (जैसा कि "सब कुछ प्राप्त करें", "कुंजी प्राप्त करें" या "कुंजी श्रेणी प्राप्त करें"।)

एसक्यूएल दुनिया में सबसे निकटतम सादृश्य होगा यदि आप केवल संग्रहीत कार्यविधियों का उपयोग करके डीबी को पूछ सकते हैं – आप जिस क्वेरी को समर्थन देना चाहते हैं वह पूर्वनिर्धारित होना चाहिए

दस्तावेजों का डिजाइन बहुत लचीला है मुझे केवल दो प्रतिबंध मिले हैं:

  • एक ही दस्तावेज़ में संबंधित डेटा को एक साथ रखें, क्योंकि इसमें शामिल होने के लिए कुछ भी नहीं है
  • दस्तावेज इतना बड़ा नहीं बनाते हैं कि वे बहुत बार अपडेट किए जाते हैं (जैसा कि एक ही दस्तावेज़ में वर्ष के लिए सभी कंपनी की बिक्री करना), चूंकि हर दस्तावेज़ अपडेट एक पुन: अनुक्रमण करता है

लेकिन विचारों को डिज़ाइन करने के लिए सबकुछ टिका है

वैकल्पिक डिज़ाइन मैंने पाया है कि किसी एसक्यूएल डाटाबेस की तुलना में CouchDB के साथ बेहतर परिमाण के काम के आदेश भंडारण स्तर की बजाय सिस्टम स्तर पर हैं। यदि आपके पास कुछ डेटा है और आप उन्हें वेब पृष्ठ पर सेवा देना चाहते हैं, तो कुल प्रणाली की जटिलता कम से कम 50% कम हो जाती है:

  • कोई डिजाइनिंग डीबी तालिकाओं (मामूली मुद्दे)
  • कोई ओडीबीसी / जेडीबीसी मध्यवर्ती परत, HTTP पर सभी प्रश्नों और लेनदेन (मध्यम मुद्दा)
  • साधारण डीबी टू ऑब्जेक्ट मैपिंग JSON से है, जो एसक्यूएल (महत्वपूर्ण) की तुलना में लगभग तुच्छ है !
  • आप संभावित रूप से संपूर्ण एप्लिकेशन सर्वर को छोड़ सकते हैं, क्योंकि आप अपने दस्तावेज़ों को AJAX का उपयोग करके सीधे ब्राउज़र द्वारा पुनर्प्राप्त करने के लिए डिज़ाइन कर सकते हैं और HTML के रूप में प्रदर्शित होने से पहले थोड़ा सा जावास्क्रिप्ट पॉलिशिंग जोड़ सकते हैं। (विशाल !!)

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

क्या आपको लगता है कि असंभव लगता है कुछ के खिलाफ अपने सिर मारा?

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

उस प्रश्न में एक सीमा एक ही समय में दो या दो से अधिक दस्तावेजों को नहीं देख सकता है – कोई जुड़ने या अन्य प्रकार के बहु-दस्तावेज़ संबंध नहीं हैं, लेकिन अभी तक कुछ भी अनदेखी नहीं है

एक उदाहरण सीमा के रूप में, गिनती और रकम आसान होती है लेकिन औसत की गणना कोचडीबी दृश्य / क्वेरी द्वारा नहीं की जा सकती। फिक्स: राशि लौटें और अलग-अलग गणना करें और क्लाइंट पर औसत की गणना करें।

क्या आपने किसी भी डिजाइन पैटर्न के साथ अंतराल को पार कर लिया है, जैसे एक से दूसरे में अनुवाद करने के लिए?

मुझे यकीन नहीं है कि यह संभव है यह एक पूर्ण रीडिज़ाइन का अधिक है, जैसे कि ऑब्जेक्ट ओरिएंटेड स्टाइल के लिए फ़ंक्शनल स्टाइल प्रोग्राम का अनुवाद करना। सामान्य तौर पर, SQL दस्तावेज़ और प्रत्येक दस्तावेज़ में अधिक डेटा की तुलना में बहुत कम दस्तावेज़ प्रकार होते हैं

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

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

क्या आप अभी भी स्पष्ट डेटा मॉडल करते हैं (जैसे यूएमएल में)?

क्षमा करें, दस्तावेज़ डीबीज़ से पहले कभी भी यूएमएल नहीं था 🙂

लेकिन आपको किसी प्रकार के मॉडल की ज़रूरत है, जिसमें कहा गया है कि कौन से फ़ील्ड संबंधित हैं और किस प्रकार के मूल्यों में वे हैं। बाद में अपने स्वयं के संदर्भ के लिए और यह सुनिश्चित करने के लिए कि डीबी का उपयोग करते हुए हर बच्चे सम्मेलनों को जानते हैं। चूंकि आप कोई त्रुटि प्राप्त नहीं करते हैं, उदाहरण के लिए, किसी पाठ फ़ील्ड में कोई दिनांक संग्रहीत करते हैं, और कोई भी ऐसे फ़ील्ड को जोड़ या निकाल सकता है, जिस तरह वे महसूस करते हैं, आपको ढीली लेने के लिए सत्यापन कोड और सम्मेलनों दोनों की आवश्यकता होती है। खासकर यदि आप बाह्य संसाधनों के साथ काम करते हैं

क्या आपको कोई अतिरिक्त प्रमुख सेवाओं की याद आती है जो RDBMSes प्रदान करते हैं?

नहीं। लेकिन मेरी पृष्ठभूमि वेब एप्लिकेशन डेवलपर है, हम केवल उस हद तक डेटाबेस के साथ सौदा है जिसे हमें करना चाहिए 🙂

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

तो जो कुछ भी मैं छोड़ रहा हूं वह है, जो वास्तव में पहली जगह पर नहीं था। जाहिर है, आपका अनुभव भिन्न हो सकता है


एक चेतावनी: मैं अब जो काम कर रहा हूं वह वित्तीय डेटा, स्टॉक कोट्स और पसंद के लिए एक वेबएप है। यह एक दस्तावेज डीबी के लिए बहुत अच्छा मैच है, मेरे दृष्टिकोण से मैं किसी भी परेशानी के बिना डीबी (दृढ़ता और प्रश्न) के सभी लाभ प्राप्त कर सकता हूं।

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

मैं जो कहने की कोशिश कर रहा हूं वह यह है कि दस्तावेज़ों के सभी सफल अनुप्रयोग जिनके बारे में मुझे पता है, वे डेटा के साथ रहे हैं जिनके पास पहले स्थान पर अधिक अंतर नहीं था: दस्तावेज (Google खोज में), ब्लॉग पोस्ट, समाचार लेख, वित्तीय डेटा ।

मुझे उम्मीद है कि डेटासेट है जो दस्तावेज़ मॉडल की तुलना में एसक्यूएल के लिए बेहतर नक्शा करता है, इसलिए मैं सोचता हूं कि SQL बच जाएगा।

लेकिन हम में से जो डेटा को स्टोर करने और पुनः प्राप्त करने का एक आसान तरीका चाहते हैं – और मुझे संदेह है कि हम में से बहुत से – दस्तावेज डेटाबेस (कोचडीबी के रूप में) एक आकस्मिक धन है

मैं अपने दिमाग के पीछे यह काउचडीबी के साथ उत्तर दे रहा हूं, लेकिन मैं मानता हूं कि अन्य डीबी के लिए भी सच होगा। हमने CouchDB का उपयोग करने पर ध्यान दिया, लेकिन अंत में इसके खिलाफ निर्णय लिया क्योंकि हमारा डेटा एक्सेस पहले से ज्ञात नहीं है और स्केलेबिलिटी समस्या नहीं है।

और जोर से:

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

आसान:

  • अगर आप अपने डेटा एक्सेस पैटर्न को जानते हैं तो तेज़ हो
  • माइग्रेशन / असफल ओवर डेटाबेस के लिए आसान है क्योंकि कोई प्रोग्राम आपको प्रोग्राम के रूप में कोई वादा नहीं किया जाता है। हालांकि आप अंततः स्थिरता प्राप्त करते हैं शायद। आखिरकार। कुछ समय।
  • तालिका से एक पंक्ति की तुलना में समझने में एक कुंजी / मान बहुत आसान है सभी (पेड़) संबंधों में पहले से ही हैं, और पूर्ण वस्तुओं को पहचाना जा सकता है।

मॉडलिंग उसी के बारे में होना चाहिए, लेकिन आपको एक दस्तावेज़ में जो भी रखा गया है, उसके बारे में सावधान रहना चाहिए: यूएमएल का उपयोग ओ ओ मॉडलिंग और डीबी मॉडलिंग दोनों के लिए भी किया जा सकता है, जो पहले से ही दो अलग-अलग जानवर हैं।

मैं एक अच्छा खुला ओ ओ डेटाबेस अच्छी तरह से सी # / Silverlight के साथ एकीकृत देखने के लिए पसंद आया होगा बस चुनाव को और भी मुश्किल बनाने के लिए 🙂

फ्लैट फाइलों को किसी भी आकार के डेटा सेट के लिए रहस्यमय और अव्यावहारिक माना जाता है। हालांकि, अधिक मेमोरी वाले तेजी से कंप्यूटर मेमोरी में एक फ़ाइल को लोड करना और वास्तविक समय में सॉर्ट करना संभवतः कम से कम छोटे और स्थानीय, एकल-उपयोगकर्ता अनुप्रयोगों के लिए संभव है।

उदाहरण के लिए, आप आम तौर पर 10,000 अभिलेखों की एक फाइल पढ़ सकते हैं और आधे से भी कम समय में किसी फ़ील्ड पर इसे स्वीकार्य प्रतिक्रिया समय स्वीकार कर सकते हैं।

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

वास्तविक जीवन में जो संबंधपरक डेटाबेस मैं देखता हूं, वे आपके दावों के विपरीत, बिल्कुल ठीक नहीं होते हैं। जब पूछा जाए तो डिजाइनर मुझे बताते हैं कि ज्यादातर प्रदर्शन के कारण होता है। आरडीबीएम शामिल होने में अच्छा नहीं है, इसलिए तालिकाओं को नॉर्मजेनाइज़ेशन पॉइंट से बहुत अधिक व्यापक माना जाता है। ऑब्जेक्ट ओरिएंटेड डेटाबेस इस पर बहुत बेहतर हो जाते हैं।

एक अन्य बिंदु जहां RDBM को समस्याएं हैं इतिहास / समय-निर्भर कुंजियां हैंडलिंग