2009-06-01 14 views
5

मैं & डिजाइनिंग मेरे अपने एसक्यूएल-बराबर (DDL + DML) है कि ...एसक्यूएल विकल्प डिजाइनिंग?

  1. एक शुद्ध रिलेशनल बीजीय भाषा को लागू करने की सोच रहा हूँ, और
  2. एक सुरुचिपूर्ण Lisp-/योजना की तरह है वाक्यविन्यास

एक आरडीबीएमएस जैसे कि MySQL मानते हुए, मुझे वास्तव में मेरी भाषा डिज़ाइन कार्य शुरू करने की आवश्यकता होगी? स्टोरेज इंजन परत के शीर्ष पर जैसे InnoDB?

मुझे नहीं पता कि सभी आरडीबीएमएस कार्यक्षमता आमतौर पर स्टोरेज इंजन के ऊपर क्या बैठती है? मेरी वर्तमान अंतर्ज्ञानी समझ यह है कि आरडीबीएमएस (जैसे कि माईएसक्यूएल) बनाने के लिए आवश्यक अधिकांश काम पहले से ही स्टोरेज इंजन (विशेष रूप से, इनो डीबी में) के भीतर किया जा चुका है, और आपको बस इतना करना होगा कि चारों ओर एक रैपर भाषा बनाएं यह। लेकिन मुझे यह भी पता है कि अगर वह वास्तव में सच थे, तो MySQL क्यों पहले स्थान पर होगा!

+0

MySQL और स्टोरेज इंजन पारिस्थितिकी तंत्र यह है: स्टोरेज इंजन परत जो अपनी मूल भंडारण फाइल सिस्टम को ठीक उसके ऊपर साइटों है। उच्च स्तर SQL क्वेरी पार्सर, अनुकूलक, क्वेरी कैश, आदि MySQL के प्लगेबल भंडारण इंजन वास्तुकला को इस तरह से डिजाइन किया गया है से बना रहे हैं कि स्टोरेज इंजन देशी भंडारण युक्ति (रों) और अपने बीच एक जुदाई परत है उच्च परतें, जैसे कि MySQL क्लाइंट। –

उत्तर

5

मुझे लगता है कि यह चारों ओर जाने के लिए सबसे अच्छा तरीका है, अपनी भाषा और SQL के बीच एक अनुवादक बनाने के लिए मुख्य कारण है कि तुम क्या अपने एसक्यूएल बोली के माध्यम से प्रदान की जाती है की तुलना में एक RDBMS से अधिक कार्यक्षमता प्राप्त करने में सक्षम नहीं होगा होगा।

MySQL अस्तित्व काम भंडारण इंजन द्वारा किए गए कार्य की कठिनाई के साथ कोई संबंध नहीं है, storage engines in MySQL वास्तव में, MySQL छोड़ने पार्स और SQL अनुकूलन और पुनः प्राप्त करने के इंजन से डेटा इसी अर्थ विज्ञान का सम्मान, घुरघुराना अधिकांश काम इंजन का

अधिकांश rdbms उपयोगकर्ताओं/प्रशासकों को स्टोरेज इंजन का पर्दाफाश नहीं करते हैं, इसलिए इस संबंध में MySQL कुछ अद्वितीय है, जो अनुवादक बनाने के लिए अधिक उचित बनाता है, इस तरह आप उपयोग करने के लिए (कुछ वाक्यविन्यास नियमों को बदलकर) सक्षम होंगे आपके ऐप के माध्यम से एक से अधिक rdbms।

इसके अतिरिक्त, आप शायद मौजूदा डेटाबेस तकनीक पर शुद्ध संबंधपरक भाषा उत्पन्न करने में सक्षम नहीं होंगे, अधिक जानकारी के लिए The Third Manifesto देखें।

सभी ने कहा कि, मैं वास्तव में सभी मौजूदा एसक्यूएल रैपरों को देख सकता हूं, शायद some will suit your taste

+0

हां, यह सहायक था। धन्यवाद, विंको! – user10955

1

पारंपरिक रूप से कई rdbms उत्पादों को आईएसएम पैकेज पर बनाया गया है - mysql एक स्पष्ट उदाहरण है। वे सभी टेबल और इंडेक्स निर्दिष्ट करने के स्तर पर काम करते हैं, पंक्तियों को पुनरावृत्त करते हैं, आदि; पढ़ने, लिखने, ताले आदि को संभालने के लिए बुनियादी सुविधाओं के साथ

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

9

यदि आप वास्तव में इसे लिस्प में लिखते हैं तो आपको अधिक समय नहीं लेना चाहिए। मैंने लगभग दोपहर में लिस्प में एक साधारण डेटाबेस इंजन लिखा था। यहां एक उदाहरण दिया गया है:

(select movies (<= 1990 year 2000) (member director '(terry-gilliam tim-burton))) 

यहां, 'चयन' एक मैक्रो है। यह भविष्यवाणियों को स्कैन करता है जो प्रतीकों के लिए इसका पालन करते हैं जो फ़ील्ड नाम हैं और उन्हें डेटाबेस में फ़ील्ड में बांधते हैं। फिर यह एक ऐसा फ़ंक्शन लिखता है जो फ़ंक्शन को पास किए गए रिकॉर्ड के मानों पर उन फ़ील्ड को बांधता है, और उस फ़ंक्शन का उपयोग करके तालिका फ़िल्टर करता है। मैक्रो कुछ इस तरह के लिए विस्तारित:

(flet ((filter (item) 
     (let ((year (movie-year item)) 
       (director (movie-director item))) 
     (and (<= 1990 year 2000) 
       (member director '(terry-gilliam tim-burton)))))) 
(loop for item in movies 
     if (filter item) collect item)) 

यह इस तरह से कर रही है (वास्तव में लिस्प में, बजाय सिर्फ एक लिस्प की तरह सिंटैक्स का उपयोग) के बारे में अच्छी बात यह है कि आप मुक्त करने के लिए संकलन हो रही है।मेरे सिस्टम पर, उपरोक्त कोड डेटाबेस इंजन द्वारा व्याख्या नहीं किया गया है, यह वास्तव में प्रोग्राम का एक संकलित हिस्सा है (सी में ऐसा नहीं कर सकता, अब आप कर सकते हैं?)। नतीजतन यह तेज़ है, भले ही डेटाबेस कोड स्वयं ('चयन' और तालिका परिभाषाओं के लिए कोड) केवल कुछ पंक्तियां लंबी है। डेटाबेस पूरी तरह से स्मृति निवासी है, लेकिन इससे कोई फर्क नहीं पड़ता ... आप बाहरी डेटाबेस को समायोजित करने के लिए केवल मैक्रो बदल सकते हैं और यहां तक ​​कि इसे इंडेक्स का उपयोग भी लिख सकते हैं। जिस परियोजना पर मैं काम कर रहा था, उसके लिए यह काफी अच्छा था, इसलिए मैंने इंडेक्स या कुछ भी फैंसी नहीं जोड़ा।

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

+0

वाह ... लिस्प शांत है। +1 – Zifre

1

प्रैक्टिकल कॉमन लिस्प, में this chapter एक संगीत डेटाबेस के लिए एक सरल RDBS शैली इंटरफेस करना है। मदद हो सकती है।

संबंधित मुद्दे