अपना खुद का डेटाबेस सिस्टम बनाएं [बंद]


65

मुझे यह सीखने की आवश्यकता है कि डेटाबेस कैसे उन्हें अधिक कुशलता से उपयोग करने के लिए काम करता है, और मेरे सीखने का तरीका है।

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

तो मैं इसे कैसे बनाऊंगा? क्या संसाधन / ट्यूटोरियल / किताबें मैं समझने के लिए पढ़ सकता हूं?

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

यदि ऐसे संसाधन उपलब्ध नहीं हैं, तो मैं कुछ अनुमान लगाता हूं कि ग्राहक कैसे बनाया जाए, कम से कम सही दिशा में एक कदम होगा।


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

4
आप कुछ कॉलेज स्तर और स्नातक स्तर के डेटाबेस पाठ्यक्रम ले सकते हैं। ऑनलाइन कई ओपन सोर्स कोर्स हैं। आप खाली समय में कुछ पाठ्यपुस्तकें खरीद सकते हैं और उनका अध्ययन कर सकते हैं। यह आपको कुछ विचार और शुरुआती बिंदु देगा। PostgreSQL के बारे में इतिहास और समाचार पढ़ने से भी मदद मिलेगी (कल्पना के संदर्भ में, हालांकि यह आपको कोई विचार नहीं देगा कि वास्तव में उन सुविधाओं को कैसे लागू किया जाता है)
rwong

9
I studied open-source DBs, but their codebase is too huge: अगर रेडिस या फ्लॉकडब जैसी कोई चीज़ आपके पढ़ने के लिए बहुत बड़ी है, तो मैं नहीं देखता कि आप लेखन या स्वयं के डेटाबेस का सामना कैसे करेंगे।
यानिस 25'25 '

10
@YannisRizos निष्पक्षता में, कोड (imo) पढ़ना अपने आप को लिखने से कहीं अधिक कठिन है।
एलेक्सवर्ब

12
@ Xananax: मेंढ़कों ( क्रिस्टल- coslections.com/stories/story_73.htm) को न सुनें । आप जो भी आनंद लेते हैं उसे करें और प्रक्रिया का आनंद लेने के लिए एक उद्देश्य होना आवश्यक नहीं है।

जवाबों:


61

(यह "नोड-ओरिएंटेड" है, अगर यह भी मौजूद है)

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

और चूंकि मेरे मन में जो है वह न तो संबंधपरक है और न ही दस्तावेज-उन्मुख

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

भाषा थोड़ी सी भी मायने नहीं रखती।

हाँ, यह (दुर्भाग्य से) होता है, क्योंकि जब आप डेटाबेस परिवार चुनते हैं, तो आपको उस परिवार के ओपन सोर्स डेटाबेस से कोड तलाशना शुरू करना चाहिए। क्या देखना है इस पर कुछ सामान्य दिशानिर्देश हैं:

  • अपेक्षाकृत छोटे कोडबेस,
  • वास्तु संबंधी दस्तावेज या कम से कम एक विकास ब्लॉग,
  • आपके द्वारा चुना गया डेटाबेस परिवार में सामान्य माना जाने वाला है, यदि यह अत्यधिक विशिष्ट है, तो इससे सीखना कठिन होगा।

फिट होने वाले कुछ उदाहरण:

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

एक अन्य बढ़िया विकल्प MySQL के लिए एक इंजन बनाने पर ध्यान केंद्रित करना होगा, जैसा कि @NB पहले वाले उत्तर में बताता है ।

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

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

क्या संसाधन / ट्यूटोरियल / किताबें मैं समझने के लिए पढ़ सकता हूं?

काफी किताबें हैं:

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

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


5
यह अच्छी पोस्ट है
Chani

2
यह सुपर है! आप से भी अधिक आ रहा है :) मैं लगभग एक-दूसरे के उत्तर को स्वीकार करना चाहता हूं, लेकिन जब से मैं इसे चुनता हूं, यह होना चाहिए। I'm expecting a comment with a link to your repository when you're done: सबसे निश्चित रूप से! फिर से धन्यवाद, आप और बाकी सभी के लिए, यह वास्तव में उत्थान था।
Xananax

3
और यहां आने वाले किसी भी व्यक्ति के लिए एक ही उत्तर की तलाश में: मुझे लगता है कि flockDB सीखने के लिए सबसे अच्छा उम्मीदवार है, कोडबेस वास्तव में छोटा है, कोड बहुत पठनीय (हालांकि मैं scala नहीं बोलता) और समझने में आसान।
ज़ानानाक्स

@Yannis, Btw आप कौन सी पुस्तकों की सिफारिश करते हैं जो आपने पढ़ी हैं?
पचेरियर

@Xananax Sooo यह कैसे साथ आ रहा है? कोई भी भंडार जिसे हम देख सकते हैं? :)
राडु मुरझिया

27

आपको बस करना चाहिए और बहुत अधिक सोचना बंद कर देना चाहिए। सीखने की प्रक्रिया का आनंद और उत्साह उपहार हैं।

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

आपको अपने आप को सही ठहराने की ज़रूरत नहीं है जैसे कि आयेंडे ने उस दिलचस्प पोस्ट में किया था । सवाल यह था:

हालांकि एक व्यावहारिक डेवलपर के रूप में, मैं सोच रहा हूं कि संतृप्त बाजार में यह नया क्या पेश कर रहा है, जहां आपके पास काफी परिपक्व विकल्प हैं जैसे कि CouchDB, MongoDB, Tokyo, Redis, और कई और अधिक? इनमें से कई उत्पाद क्रॉस प्लेटफॉर्म पर भी हैं और एक सिद्ध रिकॉर्ड के साथ सी स्पीड पर चलते हैं, जिनका उपयोग बहुत बड़ी वेब साइटों में किया जा रहा है, जहाँ उनकी शार्पिंग क्षमताओं और दोष सहिष्णुता को बहुत दूर धकेल दिया गया है।

यदि आप इस प्रक्रिया में अपना आनंद लेते हैं, तो उद्देश्य के बारे में चिंता न करें, आप पहले ही जीत चुके हैं।


4
+1, बहुत विचारशील और शिक्षण उत्तर :-) ... वास्तव में किसी के लिए अच्छा जवाब जो कुछ करना चाहता है
पंकज उपाध्याय

वाकई बहूत बढिया। मैं इसे स्वीकार करने के कगार पर था। मैंने ऐसा इसलिए नहीं किया क्योंकि मैंने सोचा था कि यानिस का जवाब इस बिंदु पर अधिक होना चाहिए, और लोगों को एक ही सवाल करने में मदद करने की अधिक संभावना है। लेकिन यह निश्चित रूप से उत्साहजनक था। बहुत बहुत धन्यवाद।
19an में Xananax

Yannis जवाब मेरी तुलना में बेहतर है और अपनी पसंद के लायक है

6

"(यह" नोड-ओरिएंटेड "है, अगर यह भी मौजूद है)"। - यह हो सकता है कि आप ज्यादा क्यों नहीं खोज रहे हैं!

संस्करण 0.1 के साथ गोता लगाएँ और देखें कि आपको कहाँ मिलता है। आप जो चाहते हैं उसे पैदा करने के प्रयास से अधिक सीख सकते हैं, यह पूछने से कि आपको "क्या" करना चाहिए। इसे कुछ दिन दें और फिर समीक्षा करें कि आपको क्या मिला है।

लगभग 18 साल पहले मैंने btree इंडेक्स के साथ एक बेसिक डेटाबेस सिस्टम (मस्ती के लिए, गो फिगर) लिखा और एक बहुत कुछ सीखा।



4

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

मुझे नहीं लगता कि आपको बहुत अधिक शोध करने की आवश्यकता है। ऐसा लगता है जैसे कि नोड-आधारित डेटाबेस सिस्टम बनाने के लिए जो अनुभव होता है उसका उद्देश्य प्राप्त करना है।

यहां बताया गया है कि मैं कैसे आरंभ करूंगा:

  1. अपनी पसंदीदा भाषा या ऐसी भाषा चुनें जिसे आप सुधारना चाहते हैं।
  2. नोड ऑब्जेक्ट बनाएं (या जो भी आपकी भाषा में निकटतम है)। उन्हें लिंक करने का तरीका जानें।
  3. SQL कथनों की एक छोटी सूची बनाएं जिसे आप पहले लागू करेंगे।
  4. निर्णय लें कि डेटा को कैसे बचाया जाए। एक स्पष्ट समाधान सभी नोड्स को क्रमबद्ध करना है, जब कार्यक्रम शुरू होता है, तो उन्हें लोड करें और कार्यक्रम समाप्त होने पर उन्हें बचाएं।

काम करने के लिए मूल बातें प्राप्त करने के बाद, आपके पास मुश्किल या समस्याग्रस्त होने के बारे में अधिक जानकारी होगी। फिर आप इसके बारे में कुछ शोध कर सकते हैं, कुछ सुधार पा सकते हैं और उन्हें एकीकृत कर सकते हैं।


1
मैं आपके द्वारा सुझाए गए चरणों का पालन कर रहा हूं। 1,2,3 कोई समस्या नहीं हैं। हालांकि, मैं # 4 से स्टम्प्ड हूं। बड़ी मात्रा में डेटा के मामले में, मैं केवल प्रासंगिक भागों में मेमोरी को कैसे लोड करूंगा? मैंने सब कुछ बाइनरी डेटा के रूप में संग्रहीत करने के बारे में सोचा और एक अन्य अनुक्रमणिका फ़ाइल रखी, लेकिन क्या होगा यदि उपयोगकर्ता सूचकांक द्वारा क्वेरी नहीं कर रहा है? मुझे अभी भी पूरी फ़ाइल के माध्यम से लूप करना होगा ... मुझे लगता है कि यह एक और सवाल का समय है
Xananax

सिर्फ स्मृति में सब कुछ क्यों नहीं स्टोर करें? यदि आप 1 जीबी समर्पित करते हैं, तो इससे बहुत अधिक डेटा होगा। वैकल्पिक रूप से, प्रत्येक बाइनरी डेटा नोड को डिस्क पर संग्रहीत करें, और फिर आपके पास पाठ के लिए 1 जीबी होगा। यह बहुत पाठ है। वैसे भी, मुझे लगता है कि 1GB से बड़े डेटाबेस को संभालना अभ्यास के लिए केंद्रीय नहीं है।
बी सेवन

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

3

अपना खुद का डेटाबेस लिखना "ताकि यह समझने के लिए कि यह कैसे काम करता है" ऐसा करने का एकमात्र अच्छा कारण है (क्योंकि डेटाबेस सही पाने के लिए कठिन है, और सही साबित करने के लिए मुश्किल है)। तुम पागल हो, लेकिन एक अच्छे तरीके से!

यह कैसे किया जाता है यह देखने के लिए, मैं SQLite को देखने का सुझाव देता हूं। SQLite स्रोत केवल बारे 1.3MB संकुचित है, और यह एक पूरी तरह से एसिड अनुरूप व्यवहार डेटाबेस है। यह सार्वजनिक डोमेन और मुख्य लेखक का एक अच्छा लड़का है जो मुझे यकीन है कि आपके सवालों का जवाब देने में खुशी होगी। (मुझे लगता है कि ट्रिकिएस्ट बिट्स डिस्क को सही मायने में जानकारी देने के लिए आते हैं। झूठ बोलने से रोकने के लिए ओएस और हार्डवेयर को राजी करना और वास्तव में लेन-देन लिखना अब आश्चर्यजनक रूप से मुश्किल है और मुझे खुशी है कि मुझे कभी भी डीबी लिखना नहीं पड़ता है।)


1
SQLite कोडबेस 0,2 * 10 ^ 6 लोकेशन (5mb विघटित) तक पहुंचता है, यह उतना छोटा नहीं है
यानिस २५'११

1
@Yannis: MySQL या PostgreSQL या किसी अन्य सर्वर DB सिस्टम के साथ तुलना करें ...
डोनल फैलो

3

कोई किताब खरीदें:

http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9

सूचकांक आज डेटाबेस का सबसे महत्वपूर्ण पहलू हैं। द्विआधारी पेड़ों की तरह मौजूद विकल्पों का अध्ययन करें।

साथ ही कार्टेशियन उत्पाद के बारे में भी पढ़ें जो गणना करने का एक तरीका है कि जटिल जोड़ कैसे होंगे।


3

मुझे यह जानने की जरूरत है कि डेटाबेस कैसे काम करते हैं

संबंधपरक बीजगणित जानें।

एक छोटा DB इंजन ढूंढें, स्रोत जानें।

ताकि उन्हें अधिक कुशलता से उपयोग किया जा सके

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

पारंपरिक मार्ग लें: एक कोर्स करें, एक किताब पढ़ें, सहकर्मी की समीक्षा करें, प्रश्न पूछें, इंडेक्स ल्यूक का उपयोग करें


5
Learn relational algebra.यह मानते हुए कि पाठ्यक्रम के संबंधपरक डेटाबेस में दिलचस्पी है ...
yannis
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.