2013-02-08 13 views
18

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

हम सर्वर-साइड एंडपॉइंट को पूरी तरह से हटाकर इसे और अनुकूलित करने के लिए देख रहे हैं। हम एस 3 पर सीधे SQLite3 का पर्दाफाश करने के लिए ठीक (सुरक्षा परिप्रेक्ष्य से) हैं और एक जावास्क्रिप्ट मॉड्यूल चार्ट को पढ़ और उत्पन्न करते हैं।

SQLite3 फ़ाइलों को काफी छोटे होने की उम्मीद है - शायद 4-6 कॉलम और शायद डेटा की 10-500 पंक्तियां, और उनमें से सभी केवल एक तालिका रखते हैं। टेस्ट रन 15 केबी से कम फ़ाइल आकार इंगित करता है। हम ब्राउज़र पर SQLite3 लिखने या उसका उपयोग करने का इरादा नहीं रखते हैं। हमें इसे वेबस्क्लुएल या इंडेक्सड डीबी फॉर्म के रूप में ब्राउज़र पर कैश करने की आवश्यकता नहीं है, लेकिन यदि आवश्यक हो तो हम उनका उपयोग करने के साथ ठीक हैं।

मेरी वेब खोजों से, हम एक जावास्क्रिप्ट लाइब्रेरी नहीं ढूंढ पाए हैं जो SQLite3 फ़ाइल को पढ़ सकता है और परिणामों के लिए क्वेरी कर सकता है। यदि आप किसी भी जावास्क्रिप्ट पुस्तकालयों के बारे में जानते हैं जो ऐसा कर सकते हैं, तो कृपया हमें बताएं।

दूसरी तरफ, यदि आपको लगता है कि हमें किसी भी कारण से ऐसा नहीं करना चाहिए, तो कृपया उन्हें टिप्पणियों/उत्तरों के रूप में भी फेंक दें, क्योंकि यह ऐसा कुछ है जिसे हम पहली बार कोशिश कर रहे हैं और थोड़ा सा लगता है -फ-द-बॉक्स, तो फीडबैक स्वागत है!

+1

पर दस्तावेज़ देखें यह जावा स्क्रिप्ट द्वारा नहीं किया जा सकता हैं सीधे - हालांकि, WebSQL/IndexedDB * हो सकता है * उपयोग SQLite के नीचे; लेकिन यह एक कार्यान्वयन विस्तार है। (SQLite * को अधिकांश मामलों में एक [स्थानीय] फाइल सिस्टम में * इन-प्रोसेस एक्सेस की आवश्यकता होती है।) –

+0

.. और मैं एक डेटाबेस इंजन के * पूर्ण पुनर्लेखन * की कल्पना नहीं कर सकता जो जावास्क्रिप्ट में SQLite डेटा पढ़ सकता है (उदाहरण के लिए मेमोरी डेटा में केवल) बहुत व्यावहारिक होगा, लेकिन [मैं पहले आश्चर्यचकित हूं] (http://bellard.org/jslinux/)। –

+0

@pst आपको पहली टिप्पणी के बारे में, हां, मुझे पता है कि वे नीचे SQLite का उपयोग कर रहे हैं, लेकिन हमारी ओर से, इसे सर्वर से लाने और इसे WebSQL/IndexedDB के साथ समन्वयित करने में बहुत परेशानी होती है और लंबे समय तक बनाए रखने के लिए बहुत परेशानी होती है चलाते हैं। – Shreeni

उत्तर

3

मैं सबसे अच्छा नहीं बता सकता, लेकिन एक: एक जावास्क्रिप्ट SQLite रीडर लाइब्रेरी स्वयं लिखें। यह एक कठिन काम होगा, लेकिन मुझे यकीन है कि यह किया जा सकता है। कुछ अच्छे लोगों ने pdf.js किया है, जो पीडीएफ फाइलों के लिए एक जावास्क्रिप्ट रेंडरर है, जो बाइनरी बीएलओबी की तरह SQLite files भी हैं।

आप शायद SQL12 फ़ाइल के माध्यम से चलने के लिए FileReader API से शुरू करेंगे, फिर सामग्री का कुछ इन-मेमोरी प्रतिनिधित्व बनाएं, जिसका आपका चार्ट टूल उपयोग कर सकता है।

अस्वीकरण: शायद आप किसी अन्य समाधान के साथ अपनी प्रारंभिक समस्या को हल करना चाहते हैं, जैसा कि दूसरों द्वारा प्रस्तावित किया गया है, लेकिन यह आपके प्रश्न का उत्तर देता है।

+4

को डिबगिंग और समर्थन करना है (हालांकि एम्सक्रिप्टन का उपयोग करके) https://github.com/kripken /sql.js – Prinzhorn

+0

बस वाह! ........... – Marcel

+0

मैं @ मार्सेल के जवाब को स्वीकार कर रहा हूं क्योंकि इस समय कोई बेहतर जवाब नहीं है (क्लाइंट साइड जेएस के लिए)। – Shreeni

12

sql.js नामक एक जावास्क्रिप्ट लाइब्रेरी है जो आप वही कर सकते हैं जो आप चाहते हैं। आपके मामले में, आप यह है कि

var xhr = new XMLHttpRequest(); 
xhr.open('GET', '/path/to/database.sqlite', true); 
xhr.responseType = 'arraybuffer'; 

xhr.onload = function(e) { 
    var uInt8Array = new Uint8Array(this.response); 
    var db = new SQL.Databse(uInt8Array); 
    var contents = db.exec("SELECT * FROM my_table"); 
    // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}] 
}; 
xhr.send(); 

तरह का उपयोग http://lovasoa.github.io/sql.js/documentation

+1

+10। यह समाधान है। lovasoa के काम मूल sql.js में विलय कर दिया गया है, इसे https://github.com/kripken/sql.js पर प्राप्त करें। उपर्युक्त उदाहरण को केवल एक ही तरीके से संशोधित करने की आवश्यकता है: शीर्ष पर 'var SQL = window.SQL;' जोड़ें (sql.js फ़ाइल को शामिल करने और पाठ्यक्रम के 'my_table' को बदलने के बाद)। अच्छा काम करता है (मैंने क्रोम का इस्तेमाल किया)। –

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

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