3 पॉइंट द्वारा GN⁺ 2023-08-14 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2023-08-14
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

    • इसलिए शायद pure Java relational database community मौजूद है। Hypersonic, H2, Derby जैसी चीजों की तरह, अगर आपको बड़े मशीन-ग्रेड scale की जरूरत नहीं है, तो database को deploy और use करना आसान है, और जरूरत पड़ने पर memory में embed करना भी आसान है
    • पूरी तरह सहमत। उस लिहाज से Python में Git को scratch से बनाने वाली ugit series वाकई अच्छी थी: https://www.leshenko.net/p/ugit/
    • पक्का नहीं। Python भी C/C++ जितना ही खराब है, और database बनाना सीखने के लिए जिन दिलचस्प हिस्सों को छूना चाहिए, उनमें से बहुतों को Python में छू पाना मुश्किल है—यह इसकी कमी है
      C और Python दोनों ही खराब language design, inconsistencies और कई pitfalls को नजरअंदाज करके सिर्फ आसान हिस्से देखें तो approachable लगते हैं। लेकिन C में कम-से-कम सही तरीके से करने का तरीका सीखने की संभावना तो है, जबकि Python में हो सकता है आपको असली दुनिया कैसी है, यह भी पता न चले
    • शानदार काम। मुझे भी कुछ ऐसा ही लगा था, और Python की वजह से मैं higher-level concepts पर focus कर पाया। हालांकि बीच-बीच में ऐसे पल भी आए जब लगा कि काश static types और compiled language में किया होता
  • बहुत पहले किसी ने 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 भी बना सकते हैं क्या?

    • विषय से थोड़ा हटकर, क्या आपको उपयोगी benchmark लिखने पर कोई अच्छी सामग्री, talk या blog post पता है?
    • learndb में TPC-C जैसा कुछ implement करके देखना कि क्या होता है, यह भी मजेदार exercise हो सकती है
  • इस पोस्ट की वजह से मुझे 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...

    • Python projects के लिए मैं Lark की जोरदार सिफारिश करूंगा। इस्तेमाल करना आसान है
      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
    • String के अंदर DSL—क्या यह सच में अच्छा तरीका है? Python में मैंने इसे इस्तेमाल किया हो या इसकी जरूरत पड़ी हो, ऐसा याद नहीं आता, लेकिन लगता है कोई बेहतर तरीका संभव हो सकता है
      expected keys वाले dict और bit OR operator से composition ही इस्तेमाल करें, तो भी कई grammar forms से मोटे तौर पर match हो जाएगा और शायद बेहतर होगा? import को import ही रहने दें और किसी-न-किसी तरह mix किया जा सकता है
      पहली नजर में यही विचार आया, हो सकता है मुझसे कुछ छूट गया हो
    • मेरा इरादा rude लगने का नहीं है, और मैं मानता हूं कि यह काम शानदार है और नई चीज सीखने का तरीका भी है। बस अगर parser generation अंतिम लक्ष्य नहीं बल्कि AST को database में execute करने का साधन है, तो parser वाले हिस्से से असल में क्या सीखने को मिलता है, यह जानने की उत्सुकता है
      क्या 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 पसंद हैं, इसलिए इसे देखना वाकई दिलचस्प रहा

    • बिल्कुल ऐसा ही था। B-tree implementation ही इस project को शुरू करने की पहली प्रेरणा थी। खासकर nodes की rebalancing और splitting से जुड़ी details महत्वपूर्ण थीं
      ऊपर से, यह disk पर stored structure है—इस बात ने implementation के बारे में सोचते समय complexity की एक और layer जोड़ दी
  • SQLite test suite में से यह कितना पास कर पाएगा?

  • क्या यह ACID guarantees या query planning/optimization support करता है?
    मैं यह पूछने के लिए नहीं कह रहा कि ऐसा होना ही चाहिए, बस जानना चाहता हूँ कि B-tree और SQL के अलावा आपने कहाँ तक कोशिश की है
    मैं भी कभी ऐसा कुछ करना चाहूँगा। शानदार काम है

    • ACID guarantees की बात करें तो, कई statements को atomically एक साथ group करने की अवधारणा, यानी transactions, इसमें नहीं हैं
      लेकिन इसके अलावा यह 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 भी बेहतरीन हैं