7

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

प्रविष्टियां मनमाने ढंग से बनाई गई हैं और संपादित की जा रही हैं (अधिकांशतः जोड़कर, पुनर्लेखन नहीं कर रही हैं)।

डीबी में सब कुछ सहेजने वाले डीबी बनाम इंडेक्स के आवश्यक सेट को रखते हुए प्रविष्टियों को फाइल सिस्टम में अलग फाइलों के रूप में स्टोर करना समझ में आता है?

+0

सामान जो आपको तेज़ की आवश्यकता नहीं है: फ़ाइल sys; सामान जो आपको तेज़ी से चाहिए: डेटाबेस –

उत्तर

4

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

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

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

3

मैं निश्चित रूप से फ़ाइल सिस्टम और पर डेटा को डीएस में पथ हैश पर संग्रहीत करता है।

1

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

यदि डेटा में कोई भी समेकन है, या इसे स्कीमा में रखा जा सकता है तो आप इसका लाभ देख सकते हैं।

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

डेटाबेस होने से आपको एक्सस्ट्रैक्शन और स्केलिंग की अच्छी परत मिल सकती है यदि आपका एप्लिकेशन XML डेटा के माध्यम से खोज करने की बड़ी मांग करता है, जिसका अर्थ है कि आपको यह नहीं करना है।

बस मेरा 2 सी।

+0

SQL सर्वर 2008 डेटा विशेषता वास्तव में ** FILESTREAM ** कहा जाता है। यह वास्तव में एक प्रकार प्रति नहीं है - यह एक विशेषता है जिसे आप 'वर्बिनरी (MAX)' कॉलम –

1

काम पर मुझे अक्सर बाद में विश्लेषण के लिए एक्सएमएल दस्तावेज़ों के बड़े सेट जमा करना होता है। आम तौर पर यह उन्हें निर्देशिका में चिपकाकर किया जाता है, और विश्लेषण grep (या इसके सभी एक्सएमएल फैक्ट्री/बिल्डर/रैपर/एपीआई सामग्री के साथ एक bespoke जावा प्रोग्राम) द्वारा किया जाता है।

एक धीमा दिन मैंने सोचा कि मैं इसे PostgreSQL में डालने का प्रयास करूंगा।दो विशेषताएं हैं जिन्हें मैं आजमा देना चाहता था:

  • उपयुक्त होने पर बड़े डेटा का स्वचालित संपीड़न (TOAST)।
  • एक अभिव्यक्ति का उपयोग कर अनुक्रमण।

पहली सुविधा के बारे में, डीबी आकार कच्चे फाइल आकार के आधे से भी कम था। एक पूर्ण पाठ खोज करना, WHERE data::TEXT LIKE '%pattern%' का उपयोग कर एक टेबल स्कैन, फ़ाइलों पर grep चलाने से वास्तव में तेज़ था। जब आप कुछ जीबी एक्सएमएल से निपट रहे हैं तो यह अकेले डीबी को सार्थक बनाता है।

दूसरी सुविधा, अनुक्रमण, बनाए रखने के लिए थोड़ा और काम है। अनुमान लगाए गए कुछ विशेष तत्व थे जो इंडेक्स के लिए अच्छा होगा। xpath('//tradeHeader/tradeId/text()', data) पर एक इंडेक्स काम करता है, लेकिन यह प्रत्येक क्वेरी में डुप्लिकेट करने के लिए दर्द हो सकता है। मुझे कुछ क्षेत्रों के लिए सामान्य कॉलम जोड़ना आसान लगता है, और उन्हें सिंक में रखने के लिए डालने/अपडेट ट्रिगर का उपयोग करें।

+0

में जोड़ सकते हैं एफएस में संग्रहीत XML/मीडिया फ़ाइलों के अलावा, केवल खोज योग्य टेक्स्ट सामग्री वाले टेबल हैं? –

+0

@ लॉजिस्टेटिका: मुझे पूरा यकीन नहीं है कि आपका क्या मतलब है। क्या आपका मतलब है कि मुख्य फाइल एफएस में डालें और डीबी में मेटाडेटा? (एक क्षेत्र के साथ यह कहकर कि फ़ाइल नाम क्या है।) मुझे लगता है कि लोग आम तौर पर यही करते हैं। मुझे अपने साथ ज्यादा अनुभव नहीं है। – Edmund

1

विचारों के एक जोड़े:

  • लेनदेन प्रबंधन;
  • बैकअप और वसूली।

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

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

0

यह इस बात पर निर्भर करता है कि आप डेटा का उपयोग कैसे करेंगे, जैसा पिछली प्रतिक्रिया कहता है।

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

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

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

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

1

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

इन तकनीकों के लिए googling का प्रयास करें।

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