6 पॉइंट द्वारा GN⁺ 2024-04-10 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • शुद्ध Go में लिखा गया MySQL-संगत डेटाबेस इंजन
  • यह एक data source-agnostic SQL इंजन है, जो MySQL syntax और protocol का उपयोग करके दिए गए data source पर queries चलाता है
  • इसमें एक सरल in-memory डेटाबेस implementation शामिल है, और आप अपना backend implement करके मनचाहे data source को query कर सकते हैं

संगतता

  • कुछ विशेष सीमाओं को छोड़कर, go-mysql-server को MySQL के विकल्प के रूप में इस्तेमाल किया जा सकता है
  • MySQL पर काम करने वाली client libraries, tools, queries, SQL syntax, SQL functions आदि go-mysql-server पर भी काम करने चाहिए
  • यदि feature differences मिलें, तो issue रिपोर्ट करने का अनुरोध है

प्रोजेक्ट का दायरा

  • data source को query करने के लिए SQL server और engine
  • testing में उपयोग के लिए उपयुक्त in-memory डेटाबेस backend implementation
  • अपने data source को query करने के लिए नए backend implementation में इस्तेमाल की जा सकने वाली interfaces
  • कुछ सावधानियों को ध्यान में रखकर और पूर्ण डेटाबेस implementation का उपयोग करके यह MySQL डेटाबेस का विकल्प बन सकता है

go-mysql-server के मुख्य उपयोग के मामले:

  1. built-in memory डेटाबेस implementation का उपयोग करके Go test environment में MySQL की जगह लेना
  2. कुछ interfaces implement करके किसी भी data source को SQL queries के ज़रिए एक्सेस योग्य बनाना

in-memory test server का उपयोग

  • in-memory test server, tests में वास्तविक MySQL server की जगह ले सकता है
  • दिए गए example code का उपयोग करके server शुरू किया जा सकता है
  • server चलने के बाद, MySQL client, Go MySQL connector, mysql shell आदि से कनेक्ट किया जा सकता है

in-memory डेटाबेस implementation की सीमाएँ

  • साथ दिया गया in-memory डेटाबेस implementation testing के लिए उपयोग करने के उद्देश्य से है
  • ज्ञात सीमाएँ:
    • यह thread-safe नहीं है। concurrency issues से बचने के लिए DDL और DML statements को एक ही goroutine तक सीमित रखना चाहिए
    • यह transactions को support नहीं करता। START TRANSACTION, ROLLBACK, COMMIT जैसे statements काम नहीं करेंगे
    • अक्षम index implementation। index lookups और joins internal tables पर full table scan करते हैं

custom backend implementation

  • कुछ interfaces implement करके अपने data source को query करने वाला backend बनाया जा सकता है
  • विस्तृत निर्देशों के लिए backend guide देखें

go-mysql-server से चलने वाले प्रोजेक्ट

  • dolt
  • gitbase (बंद किया गया)
  • यदि आप go-mysql-server के साथ डेटाबेस backend बना रहे हैं, तो बताने का अनुरोध है

लाइसेंस

  • Apache License 2.0

GN⁺ की राय

  • go-mysql-server, Go में लिखा गया एक हल्का MySQL-संगत डेटाबेस इंजन है, जो test environment में MySQL की जगह लेने या अपने data source को SQL से query करने के उपयोग में काम का लगता है
  • चूँकि इसका लक्ष्य MySQL compatibility है, इसलिए उम्मीद है कि इसे मौजूदा MySQL-आधारित applications में बड़े बदलाव के बिना अपनाया जा सकेगा
  • हालांकि यह अभी भी एक experimental project है, और खासकर in-memory implementation केवल testing के लिए है, इसलिए production में उपयोग करते समय performance और stability के मामले में सावधानी ज़रूरी लगती है
  • backend developers के लिए यह आकर्षक हो सकता है कि वे interfaces को सीधे implement करके अपनी पसंद का data source जोड़ सकते हैं। Dolt जैसे वास्तविक project examples देखना उपयोगी होगा
  • इसी तरह के MySQL-संगत डेटाबेस में TiDB, CockroachDB आदि शामिल हैं। go-mysql-server का फायदा यह है कि इसमें backend को स्वतंत्र रूप से implement किया जा सकता है, लेकिन दूसरी ओर backend development की अतिरिक्त लागत भी आती है

1 टिप्पणियां

 
GN⁺ 2024-04-10
Hacker News राय
  • Dolt को चलाने वाले query engine के रूप में go-mysql-server सबसे महत्वपूर्ण है
  • मैंने Dolt का ज़्यादातर कोड लिखा है, लेकिन मैं मूल लेखक नहीं हूँ। प्रोजेक्ट कैसे शुरू हुआ इसकी पृष्ठभूमि कहानी दिलचस्प है
  • Dolt का आइडिया आकर्षक है, लेकिन यह persistence layer बहुत अलग और बहुत महत्वपूर्ण है, इसलिए इस पर business बनाना पर्याप्त नहीं लगता। लेकिन अच्छा होगा अगर मुख्यधारा के DB इसे अपनाएँ
  • अगर MySQL से PostgreSQL और SQLite तक का support आगे बढ़ता है, तो WordPress आदि में multi-DB engine support संभव हो सकता है
  • यह MySQL से SQL तक का wire-protocol proxy लगता है। डिफ़ॉल्ट proxied DB Dolt है, और अनुमान है कि इसे Dolt से निकाला गया है
  • Go बेहतर हो सकता है, लेकिन C# developer के नज़रिए से GC language में DB implement करना चिंताजनक है। GC से जूझना पड़ेगा और कम allocation के लिए बहुत सारा non-obvious code लिखना होगा। छोटी टीम के लिए यह ठीक हो सकता है, लेकिन सही skills वाले developer भर्ती करना कठिन होगा
  • compatibility और features बहुत सीमित हैं, इसलिए production में इस्तेमाल करना कठिन है (transaction support नहीं, inefficient index implementation आदि)। यह भी जिज्ञासा है कि trigger, stored procedure आदि का support है या नहीं
  • सोच रहा हूँ कि Rails project testing के लिए इसे MySQL के in-memory replacement के रूप में इस्तेमाल करना कितना कठिन होगा। production में DB layer महत्वपूर्ण है, इसलिए सावधानी चाहिए, लेकिन अगर इससे test speed बढ़ती है तो यह दिलचस्प होगा
  • TiDB, Go और Rust में लिखा गया distributed MySQL-compatible DB है, और StarRocks, Java और C++ में लिखा गया OLAP के लिए MySQL-compatible DB है। लेकिन यह प्रोजेक्ट किसी अलग दृष्टिकोण पर काम करता लगता है। Vitess MySQL library का इस्तेमाल कठिन है, इसलिए शायद इसे ORM जैसी abstraction layer बनाने में उपयोग किया जा सकता है
  • ऐसी implementations देखकर हैरानी होती है, लेकिन संदेह है कि इसका वास्तविक उपयोग कहाँ होगा
  • सुझाव है कि MySQL के बजाय standard SQL का पालन करना कैसा रहेगा