डेटाबेस आंतरिक रूप से कैसे काम करते हैं? [बन्द है]


80

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

कुछ खास बातें जिनकी मुझे दिलचस्पी है:

  • एक डेटाबेस वास्तव में यह पता लगाने के लिए क्या करता है कि एक चयनित कथन से क्या मेल खाता है?
  • कोई डेटाबेस किसी क्वेरी से जुड़ने की व्याख्या अलग-अलग "की 1 = की 2" के साथ कैसे करता है?
  • डेटाबेस अपनी सभी मेमोरी को कैसे स्टोर करता है?
  • अनुक्रमित कैसे संग्रहीत किए जाते हैं?

यदि यह SQL सर्वर है, तो मैं बहुत अंदर Microsoft SQL Server 2005 श्रृंखला (Microsoft प्रेस) की सलाह देता हूं कि स्टोरेज इंजन और Querying पर esp .. यह आपके सभी सवालों के जवाब देता है और बहुत कुछ। आप इन ब्लॉगों में से कुछ में रुचि हो सकती है: क्रेग फ्रीडमैन Kalen Delaney वॉर्थ सदस्यता लेने के लिए SQLServerCentral भी ..
गुलज़ार नाज़िम

इस db.cs.berkeley.edu/papers/fntdb07-Healthecture.pdf और विकीपीडिया को आज़माएँ । यह एक बहुत बड़ा विषय है और RDBMS, FLATFILE आदि जैसे मॉडल हैं। पार्सर वास्तव में सबसे महत्वपूर्ण घटक में से एक है। साभार
सैफ खान ०

2
2015 तक, यह एक लेख है जो बहुत अच्छा लगता है।
Piovezan

डेटाबेस की आंतरिक वास्तुकला जटिल हैं इस आर्टिकल में mysql सर्वर और स्टोरेज इंजन की विस्तृत कार्यप्रणाली बताई गई है।
शाश्वत श्रीवास्तव

जवाबों:


83

एक डेटाबेस वास्तव में यह पता लगाने के लिए क्या करता है कि एक चयनित कथन से क्या मेल खाता है?

कुंद होना, यह क्रूर बल की बात है। बस, यह डेटाबेस में प्रत्येक उम्मीदवार रिकॉर्ड के माध्यम से पढ़ता है और फ़ील्ड से अभिव्यक्ति से मेल खाता है। इसलिए, यदि आपके पास "सेलेक्ट * टेबल से है जहां नाम = 'फ्रेड' है, तो यह शाब्दिक रूप से प्रत्येक रिकॉर्ड के माध्यम से चलता है," नाम "फ़ील्ड को पकड़ता है, और इसकी तुलना 'फ्रेड' से करता है।

अब, यदि "table.name" फ़ील्ड को अनुक्रमित किया गया है, तो वास्तविक फ़िल्टर को लागू करने के लिए उम्मीदवार रिकॉर्ड्स का पता लगाने के लिए डेटाबेस (संभावना नहीं, लेकिन आवश्यक नहीं) का उपयोग करेगा।

यह अभिव्यक्ति को लागू करने के लिए उम्मीदवार रिकॉर्ड की संख्या को कम कर देता है, अन्यथा यह वही करेगा जो हम "टेबल स्कैन" कहते हैं, अर्थात हर पंक्ति पढ़ें।

लेकिन मौलिक रूप से, हालांकि यह रेखांकित करता है कि उम्मीदवार रिकॉर्ड वास्तविक फ़िल्टर अभिव्यक्ति को लागू करने के तरीके से अलग है, और जाहिर है, कुछ चतुर अनुकूलन हैं जो किए जा सकते हैं।

कोई डेटाबेस किसी क्वेरी से जुड़ने की व्याख्या अलग-अलग "की 1 = की 2" के साथ कैसे करता है?

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

डेटाबेस अपनी सभी मेमोरी को कैसे स्टोर करता है?

अच्छे डेटाबेस में से एक यह है कि यह अपने I / O बफ़र्स को कैसे प्रबंधित करता है। लेकिन यह मूल रूप से रैम ब्लॉक से डिस्क ब्लॉक से मेल खाता है। आधुनिक आभासी मेमोरी प्रबंधकों के साथ, एक सरल डेटाबेस लगभग वीएम पर अपनी मेमोरी बफर मैनेजर के रूप में भरोसा कर सकता है। उच्च अंत DB'S यह सब स्वयं करते हैं।

अनुक्रमित कैसे संग्रहीत किए जाते हैं?

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

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

उसके बाद, स्टोरेज मुहावरे के शीर्ष पर पूरे बहु-उपयोगकर्ता, लॉकिंग, लॉगिंग और लेनदेन जटिलता है।


8
मैं सिर्फ यह कहना चाहता था कि यह वास्तव में दिलचस्प और उपयोगी उत्तर है। क्या आपने कहीं भी इस विषय पर अधिक लंबाई में लिखा है?
नाथन लॉन्ग

यह मुझे यह पता लगाने में मदद करता है कि वास्तव में डेटाबेस कैसे काम करता है
Adzimzf

"तब डेटाबेस (संभावित रूप से, लेकिन जरूरी नहीं कि) वास्तविक फ़िल्टर लागू करने के लिए उम्मीदवार रिकॉर्ड का पता लगाने के लिए सबसे पहले सूचकांक का उपयोग करें" क्या मामलों में, यदि उपलब्ध नहीं है और क्यों सूचकांक का उपयोग नहीं किया जाता है?
सत्येंद्र कुमार

1
@ सत्येंद्रकुमार यह सभी प्रकार की बातों पर निर्भर करता है, लेकिन अंत में यदि अनुकूलक (आँकड़ों के आधार पर और इस तरह) यह तय करता है कि सूचकांक से क्वेरी का परिणाम तालिका की पंक्तियों का एक बड़ा हिस्सा होगा, तो इसे अनदेखा करना सस्ता है। इसके बजाय सूचकांक और टेबल स्कैन। एक इंडेक्स में बहुत सारे यादृच्छिक I / O शामिल होते हैं, और इसकी एक लागत होती है। आखिरकार लागत केवल टेबल को स्कैन करने से अधिक है। इस तरह से चीजों को प्रबंधित करना डेटाबेस ट्यूनिंग और क्वेरी ऑप्टिमाइज़ेशन प्रक्रिया का सिर्फ एक पहलू है।
विल हार्टुंग

4
  • एक डेटाबेस वास्तव में यह पता लगाने के लिए क्या करता है कि एक चयनित कथन से क्या मेल खाता है?

    DBs अनुक्रमित का उपयोग कर रहे हैं (नीचे देखें)

  • कोई डेटाबेस किसी क्वेरी से जुड़ने की व्याख्या अलग-अलग "की 1 = की 2" के साथ कैसे करता है? पेड़ों में विलय करके बाइनरी ट्री ऑपरेशंस में शामिल हो सकते हैं।

  • डेटाबेस अपनी सभी मेमोरी को कैसे स्टोर करता है?

    उनके डेटा की तेज़ पहुंच के लिए मेमोरीमैप की गई फ़ाइलें

  • अनुक्रमित कैसे संग्रहीत किए जाते हैं?

    आंतरिक रूप से DBs अनुक्रमण के लिए B-Trees के साथ काम कर रहे हैं ।

इस विकिपीडिया पर अधिक से अधिक विवरण में बताया जाना चाहिए ..

http://en.wikipedia.org/wiki/B-tree

http://en.wikipedia.org/wiki/Database


1

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


0

सैफ, बेहतरीन लिंक। एक पक्षी की आंख का अवलोकन जो अधिकांश विषयों को कवर करने का प्रबंधन करता है, और विशिष्ट विक्रेता कार्यान्वयन पर विवरण प्रदान करता है।

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

यह ध्यान देने योग्य है कि किसी भी DBMS में "ज्ञात अच्छे विचारों" का एक सबसेट लागू किया जाता है। उदाहरण के लिए, SQLite हैश जॉइन भी नहीं करता है, यह केवल नेस्टेड लूप्स (ack !!) करता है। लेकिन फिर, यह एक आसानी से एम्बेड करने योग्य dbms है, और यह अपना काम बहुत अच्छी तरह से करता है, इसलिए जटिलता की कमी के लिए कुछ कहा जाना चाहिए।

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


0

यदि आप विस्तार से और अधिक जानना चाहते हैं, तो मैं आपको सलाह देता हूं कि आप sqlite स्रोतों को प्राप्त करें और यह कैसे करें, इस पर एक नज़र डालें। यह पूरा हो गया है, यद्यपि बड़े खुले स्रोत और वाणिज्यिक डेटाबेस के पैमाने पर नहीं। यदि आप विस्तार से अधिक जानना चाहते हैं, तो मैं निश्चित परिभाषा को SQLite की सलाह देता हूं जो न केवल साइक्लाइट का एक महान विवरण है, बल्कि सबसे अधिक पठनीय तकनीकी पुस्तकों में से एक है जो मुझे पता है। MySQL की तरफ, आप MySQL Performance Blog के साथ-साथ पुस्तक के सामने के O'Reilly High Performance MySQL (V2) से सीख सकते हैं , जिनमें से ब्लॉग लेखकों में से एक है।

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