- LearnDB एक relational database management system (RDBMS) और SQLite क्लोन है, जिसे डेटाबेस की आंतरिक संरचना को अधिक गहराई से समझने के लिए शुरू से लागू किया गया है
- यह शुद्ध Python में लिखा गया है, इसलिए कोई build चरण नहीं है, डिफ़ॉल्ट रूप से zero-configuration है, और configuration override की जा सकने वाली संरचना रखता है
select,from,where,group by,having,limit,order byको सपोर्ट करने वाला learndb-sql औरlarkआधारित कस्टम lexer·parser प्रदान करता है- यह SQL statements लेकर डेटाबेस की tables और data को manipulate करने वाला engine, तथा disk-based btree backing data structure से बना है
- उपयोग के तरीके के रूप में REPL, Python module import, और command file को engine में pass करने का तरीका सपोर्ट करता है
- कोडबेस tinkering के लिए उपयुक्त है, लेकिन वास्तविक storage solution के रूप में उपयोग नहीं किया जाना चाहिए, क्योंकि कुछ महत्वपूर्ण सीमाएँ मौजूद हैं
- floating-point arithmetic, IEEE754 की तुलना में, बहुत ही सरल रूप में लागू की गई है
select * ...जैसी wildcard column expansion सहित सामान्य utility features सपोर्ट नहीं हैं
- डेवलपमेंट चलाने की आवश्यकताएँ Linux/macOS सिस्टम और Python 3.9 या उससे ऊपर हैं, तथा database file पर exclusive read access के लिए
fcntlका उपयोग करता है - संदर्भ सामग्री के रूप में cstack का डेटाबेस ट्यूटोरियल, SQLite Database System: Design and Implementation, SQLite file format दस्तावेज़, और PostgreSQL दस्तावेज़ों का उपयोग किया गया है
1 टिप्पणियां
Hacker News टिप्पणियां
Python जैसी भाषा में ऐसा सिस्टम लिखना, मेरे हिसाब से, उल्टा बेहतरीन विकल्प है। डेटाबेस आम तौर पर C++ या C में लिखे जाते हैं, लेकिन मेरे लिए Python कहीं ज्यादा पढ़ने लायक और approachable है
अगर सच में performance लक्ष्य हो, तो बाद में इसे low-level language में port किया जा सकता है, और मौजूदा रूप में यह सीखने के लिए उपयोगी है
मैंने भी यह सीखने के लिए कि database engine distributed environment में कैसे काम कर सकता है, Python में SQL/graph Cypher/document/DynamoDB style को मिलाकर एक distributed pseudo multi-model database बनाया था: https://GitHub.com/samsquire/hash-db
C और Python दोनों ही खराब language design, inconsistencies और कई pitfalls को नजरअंदाज करके सिर्फ आसान हिस्से देखें तो approachable लगते हैं। लेकिन C में कम-से-कम सही तरीके से करने का तरीका सीखने की संभावना तो है, जबकि Python में हो सकता है आपको असली दुनिया कैसी है, यह भी पता न चले
बहुत पहले किसी ने SQLite को C से C# में फिर से लिखा/port किया था: https://code.google.com/archive/p/csharp-sqlite/wikis/Letter...
यह भी देखने लायक है कि Dr. Richard Hipp ने उस काम का कितना स्वागत किया था
शायद GitHub पर यह यहां है: https://github.com/CsharpDatabase/CsharpSQLite और बाद में और clones भी हो सकते हैं
बढ़िया। यकीनन यह मजेदार और rewarding experience रहा होगा
पता है कि मकसद इसे तेज बनाना नहीं था, लेकिन मजे के लिए कुछ benchmarks भी बना सकते हैं क्या?
इस पोस्ट की वजह से मुझे Python के लिए Lark नाम की parser library के बारे में पता चला, जो काफी अच्छी लगती है
साइट का JSON tutorial शानदार है। यह पहले JSON के लिए basic parser बनाना दिखाता है, फिर performance सुधारने के तरीकों को काफी विस्तार से cover करता है: https://lark-parser.readthedocs.io/en/latest/json_tutorial.h...
RDBMS project में इस्तेमाल की गई grammar यहां है: https://github.com/spandanb/learndb-py/blob/master/learndb/l...
grammar debug करते समय IDE बहुत उपयोगी था: https://www.lark-parser.org/ide/
EvaDB में AI models के इस्तेमाल के लिए tailored SQL-like language में Lark इस्तेमाल हो रहा है: https://github.com/georgia-tech-db/evadb/blob/master/evadb/p... https://github.com/georgia-tech-db/evadb/
अगर आपको Lark पसंद आए, तो sponsor करने पर भी विचार किया जा सकता है: https://github.com/sponsors/lark-parser
expected keys वाले dict और bit OR operator से composition ही इस्तेमाल करें, तो भी कई grammar forms से मोटे तौर पर match हो जाएगा और शायद बेहतर होगा? import को import ही रहने दें और किसी-न-किसी तरह mix किया जा सकता है
पहली नजर में यही विचार आया, हो सकता है मुझसे कुछ छूट गया हो
क्या generated parser को और efficient बनाने के लिए लगातार optimize करते रहने वाली कोई चीज होती है?
logical next step क्या AST से optimal query plan generate करना होगा?
बहुत अच्छा
SQLite को पढ़ना बहुत मुश्किल है, लेकिन यह implementation काफ़ी समझने में आसान है। खासकर virtual machine वाला हिस्सा: https://github.com/spandanb/learndb-py/blob/master/learndb/v...
इसकी तुलना इस फ़ाइल से की जा सकती है: https://github.com/sqlite/sqlite/blob/master/src/vdbe.c
हालांकि मुझे यह जानने की जिज्ञासा है कि यह LearnDB कितना complete है। SQLite को पढ़ना सिर्फ़ इसलिए मुश्किल नहीं है कि वह पुराना है, बल्कि इसलिए भी कि वह SQL के बहुत बड़े हिस्से को संभालता है और SQL specification का पालन करते-करते complex हो जाता है
SQLite के पास शानदार test suite है, इसलिए अच्छा होगा कि इस implementation पर वे tests चलाकर देखे जाएँ
सच में बढ़िया है, और मेरे जैसे लोगों के लिए data structures और algorithms बेहतर सीखने का अच्छा तरीका लगता है। मैं समझा सकता हूँ कि B+ tree कैसे काम करता है, लेकिन अगर खुद code करने को कहा जाए तो शायद अटक जाऊँगा
मुझे databases और Python पसंद हैं, इसलिए इसे देखना वाकई दिलचस्प रहा
ऊपर से, यह disk पर stored structure है—इस बात ने implementation के बारे में सोचते समय complexity की एक और layer जोड़ दी
SQLite test suite में से यह कितना पास कर पाएगा?
क्या यह ACID guarantees या query planning/optimization support करता है?
मैं यह पूछने के लिए नहीं कह रहा कि ऐसा होना ही चाहिए, बस जानना चाहता हूँ कि B-tree और SQL के अलावा आपने कहाँ तक कोशिश की है
मैं भी कभी ऐसा कुछ करना चाहूँगा। शानदार काम है
लेकिन इसके अलावा यह single-file database है, और database file को manipulate करने वाली process भी सिर्फ़ एक learndb instance हो सकती है। इसलिए single-connection database होने के नाते consistency और isolation मिलते हैं
durability उतनी ही मिलती है जितनी file system durability देता है। इसलिए यह ACID properties के किसी बीच के स्तर पर है
query planning/optimization अभी implement नहीं किया है, लेकिन optimization module कहाँ fit हो सकता है, इस पर सोचा है। parser AST output करता है, और इस AST या उससे निकले intermediate representation को optimize किया जा सकता है
यानी VM के AST execute करने से पहले AST को rewrite किया जा सकता है या nodes हटाए जा सकते हैं
थोड़ा अलग सवाल है, लेकिन क्या Python में mapDB जैसा कुछ है?
https://mapdb.org
शानदार project है। code भी बहुत readable है, और comments भी बेहतरीन हैं